Ich habe ein Problem mit den typedef-Schlüsselwörtern in C-Sprache.
In meinem Programm verwende ich die folgenden Codes:
%Vor%sie funktionieren gut. Aber warum gibt es keine Konflikte zwischen einer Variablen und einem Typ mit dem gleichen Namen ein?
Grüße.
Siehe msdn C-Sprachreferenz :
Typedef-Namen teilen den Namensraum mit gewöhnlichen Bezeichnern (siehe Name Spaces für weitere Informationen). Daher kann ein Programm einen Typ-ID-Namen und einen lokalen Gültigkeitsbereich-Bezeichner mit dem gleichen Namen haben.
Der C-Standard sagt (Abschnitt 6.2.1 - Bereiche der Identifikatoren):
Ein Bezeichner kann ein Objekt bezeichnen; ein Funktion; ein Tag oder ein Mitglied eines Struktur, Vereinigung oder Aufzählung; ein typedef name; ein Markenname; ein Makro Name; oder ein Makroparameter. Das Gleiche Bezeichner kann anders bezeichnen Entitäten an verschiedenen Punkten in der Programm.
K & amp; R2 sagen (A.11.1 - Lexical Scope)
Bezeichner fallen unter mehrere Namen Räume, die einen nicht stören Ein weiterer; der gleiche Bezeichner kann sein für verschiedene Zwecke verwendet, auch in der gleiche Umfang, wenn die Verwendungen in sind verschiedene Namensräume. Diese Klassen sind: Objekte, Funktionen, typedef Namen und Enum-Konstanten; Etiketten; Tags von Strukturen oder Gewerkschaften, und Aufzählungen; und Mitglieder von jedem Struktur oder Vereinigung einzeln.
Ich muss zugeben, das verwirrt mich. Beim Lesen des zweiten Zitats scheint es, dass Variablennamen und typedef
-ed Typen kollidieren sollten.
Variablen und typedefs besetzen den selben Namespace und können nicht Namen mit anderen Bezeichnern im genau gleichen Bereich teilen.
Allerdings ist Ihre zweite a
in main
und die Bereichsregeln gelten: Die zweite a
überschreibt die erste.
Sie können dasselbe mit einfachen Variablen tun:
%Vor%Sie werden feststellen, dass das Programm nicht kompiliert wird, wenn Sie die Variablendeklaration außerhalb von main verschieben.