sizeof Struktur oder Variable in C und C ++

8

Ich kann nicht verstehen, warum dieser Code 1 in C, aber andere Ziffer in C ++ druckt?

%Vor%

Und warum dieser Code 1 in C und C ++ druckt?

%Vor%

Kann mir bitte jemand etwas erklären?

    
FrozenHeart 11.10.2012, 05:49
quelle

3 Antworten

21

Weil in C die Struktur struct T heißt und nicht nur T . In C ++ versteckt die lokale Definition von struct T die globale Variable T :

%Vor%

Wenn sich andererseits beide Deklarationen im selben Namenskontext befinden, führt die Mehrdeutigkeit des Bezeichners T zu denselben Ergebnissen, da C ++ erwartet, dass Sie angeben, dass Sie wirklich die Struktur und nicht die Struktur verwenden möchten char T :

%Vor%

Was zu gleicher Größe für C und C ++ führt.

Wie man diese Fehler vermeidet

Normalerweise wissen Compiler, dass der Bezeichner mehrdeutig ist, aber die Warnung wird oft ausgeblendet. Verwenden Sie Compiler-Flags, um Warnungen anzuzeigen, in GCC -Wall -Wextra sind die nützlichsten für die übliche Programmierung:

%Vor%

In diesem Fall sieht man, dass das globale static char T definiert, aber nie benutzt wurde.

    
Zeta 11.10.2012 05:54
quelle
1

Wenn eine Struktur in C deklariert wird, hat sie den Typ struct <name of struct> und nicht nur den Namen der Struktur. Das ist der Grund. Um Verwirrung zu vermeiden, verwenden die Benutzer typedef , um die Deklarationen in C

zu vereinfachen     
psteelk 11.10.2012 07:53
quelle
0

Wie von anderen erwähnt, versteckt das lokale struct T im ersten Snippet die statische Variable in C++ . Um jedoch zu verstehen, was vor sich geht, müssen Sie auch über Namensdisambiguierung sprechen. Im zweiten Code-Snippet versteckt struct T T nicht - sie befinden sich im selben Bereich.

    
Avi 11.10.2012 05:58
quelle

Tags und Links