Questo sembra compilare correttamente in C++ ma non C. (almeno con il compilatore DSP TI 28xx, dove emette l'errore "atteso una dichiarazione") È menzionato da qualche parte negli standard C, oppure è il mio compilatore rotto?definizioni di struct vuote illegali in C ma non in C++?
risposta
La struttura vuota è un errore di sintassi in C. La grammatica del linguaggio C è scritta in modo da proibire le strutture vuote. Cioè non lo troverai esplicitamente dichiarato nello standard, ma solo dalla grammatica.
In C++ le classi vuote sono effettivamente legali.
P.S. Nota che spesso potresti vedere la citazione dallo standard C che dice "Se la struct-declaration-list non contiene membri con nome, il comportamento non è definito.", che viene presentato come la parte del documento che vieta le strutture vuote. In realtà, le strutture vuote sono, ancora una volta, proibite dalla grammatica. Quindi una struttura letteralmente vuota (come nella tua domanda) è un errore di sintassi, non un comportamento indefinito. La citazione precedente dello standard si applica a una situazione diversa: una struttura con senza nome. Una struct può finire non vuoto, ma allo stesso tempo senza membri nominati se tutti i membri sono bitfields anonime
struct S {
int : 5;
};
Nel caso precedente il comportamento è indefinito. Questo è ciò di cui parla la citazione sopra.
Compila con gcc 4.2 ... – Vladimir
Vedere per Vedere http://stackoverflow.com/questions/1626446/che-è-il-size-of-an-empty-struct-in-c per la discussione riguardo a C – Artefacto
uno dei commenti da quel collegamento: "Le strutture vuote sono un'estensione GCC.". Grazie :) – Vladimir