typedef mit einer Vorwärtsdeklaration Nebeneffekt?

8

Ich habe die folgende Deklaration in einer Header-Datei:

%Vor%

Ohne die Forward-Deklaration würde der Compiler diesen Fehler offensichtlich geben:

  

error: 'struct my_struct' declared inside parameter list

Wenn ich jedoch die Forward-Deklaration von my_struct durch eine typedef-Datei ersetze und die Funktionsdeklaration entsprechend aktualisiere, wird eine Feinabstimmung vorgenommen:

%Vor%

Seltsamerweise, wenn ich den typedef behalten, aber die ursprüngliche Deklaration my_struct verwende, kompiliert auch :

%Vor%

Hat das jemand anderes bemerkt? Ist dieses Verhalten ein Nebeneffekt?

    
Eitan T 08.07.2012, 13:15
quelle

1 Antwort

7

In Abschnitt 6.2.1, Absatz 7:

  

Struktur-, Union- und Enumeration-Tags haben einen Bereich, der direkt nach dem Erscheinen von beginnt   das Tag in einem Typspezifiker, der das Tag deklariert. Jede Aufzählungskonstante hat einen Gültigkeitsbereich   beginnt unmittelbar nach dem Erscheinen seines Definitionszählers in einer Aufzählungsliste. Irgendein   Ein anderer Bezeichner hat einen Gültigkeitsbereich, der unmittelbar nach dem Abschluss seines Deklarators beginnt.

Und in 6.7.2.3, Absatz 8:

  

Wenn ein Typspezifiker des Formulars   struct-or-union-Identifikator   tritt anders als als Teil einer der oben genannten Formen auf, und keine andere Erklärung der   Identifizierer als ein Tag ist sichtbar, dann erklärt es eine unvollständige Struktur oder einen Vereinigungstyp und   deklariert den Bezeichner als Tag dieses Typs.

Der typedef deklariert somit einen unvollständigen Strukturtyp.

    
Daniel Fischer 08.07.2012, 13:34
quelle

Tags und Links