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:
Seltsamerweise, wenn ich den typedef behalten, aber die ursprüngliche Deklaration my_struct
verwende, kompiliert auch :
Hat das jemand anderes bemerkt? Ist dieses Verhalten ein Nebeneffekt?
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.
Tags und Links c typedef forward-declaration