Warum ist die folgende Rechts:Warum sind Zeiger auf unvollständige Typen erlaubt und nicht auf unvollständige Typen?
typedef struct a aType;
struct a
{
int x;
aType *b;
};
und die folgende illegal:
void main()
{
typedef struct a aType;
aType someVariable;
struct a
{
int x;
aType *b;
};
}
Ich bin nur neugierig, wie in jedem Fall nach vorne verweist und soweit ich weiß, zumindest für Funktionen und Variablen, Vorwärtsreferenzierung ist nicht zulässig.
Würde die Antwort auch für C++ die gleiche sein?
In Fall 2 kennt der Compiler die Größe von 'aType' noch nicht - das erscheint, nachdem Sie versucht haben,' someVariable' zu definieren. Sie könnten jedoch 'aType * somePointer;' legitimerweise - die Zeigergröße ist bekannt, selbst wenn die Größe dessen, was es zeigt, nicht ist. –
Siehe [Was sollte 'main()' in C und C++ zurückgeben?] (Http://stackoverflow.com/questions/204476/) –
Bitte verwenden Sie einen entsprechenden Titel. Es ist völlig unabhängig von dem, was Sie fragen. Und wenn Sie sich für verschiedene Sprachen interessieren, fragen Sie nach anderen Fragen. – Olaf