Grammatik und Syntax von typedef in C-Sprache

8

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.

    
Summer_More_More_Tea 06.04.2010, 11:47
quelle

3 Antworten

6

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.

    
tanascius 06.04.2010, 11:52
quelle
6

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.

    
Eli Bendersky 06.04.2010 11:52
quelle
3

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.

    
Chris Burt-Brown 06.04.2010 12:32
quelle

Tags und Links