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?
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
:
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
:
Was zu gleicher Größe für C und C ++ führt.
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:
In diesem Fall sieht man, dass das globale static char T
definiert, aber nie benutzt wurde.
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.