Il seguente codice viene compilato correttamente senza alcun avviso su gcc.La struttura non dichiarata non causa avvisi
Si noti che non esiste una dichiarazione di inoltro per la struttura. Questo codice C e/o C++ è valido?
struct Foobar* f;
struct Foobar* fun() { return 0; }
int main() { f = 0; fun(); return 0; }
Sì, è valido. – erip
La struttura è * dichiarata *, ma non * definita *. Questi due termini sono spesso usati in modo intercambiabile, ma significano cose diverse. –
Questo è ciò che rende possibile che le strutture contengano puntatori al proprio tipo come membri (come le liste concatenate) - un tipo non ha bisogno di essere completamente dichiarato perché un puntatore a quel tipo sia valido. – DevSolar