2010-05-17 9 views
6

Dies scheint in C++, aber nicht in C richtig zu kompilieren (zumindest mit dem TI 28xx DSP Compiler, wo es den Fehler "erwartet eine Deklaration" ausgibt) Ist dies irgendwo in den C-Standards erwähnt, oder ist mein Compiler gebrochen?leere Strukturdefinitionen in C, aber nicht in C++?

+0

Es kompiliert gut mit gcc 4.2 ... – Vladimir

+1

Siehe für http://stackoverflow.com/questions/1626446/what-is-the-size-of-an-empty-struct-in-c für die Diskussion bezüglich C – Artefacto

+1

einer der Kommentare von diesem Link: "Leere Strukturen sind eine GCC-Erweiterung.". Danke :) – Vladimir

Antwort

14

Leere Struktur ist ein Syntaxfehler in C. Die Grammatik der C-Sprache ist so geschrieben, dass sie leere Strukturen verbietet. I.e. Sie werden es im Standard nicht explizit finden, es folgt nur aus der Grammatik.

In C++ sind leere Klassen in der Tat zulässig.

P.S. Beachten Sie, dass oft das Zitat aus dem C-Standard angezeigt wird: "Wenn die struct-declaration-list keine benannten Elemente enthält, ist das Verhalten nicht definiert.", die als Teil des Dokuments dargestellt wird, das leere Strukturen verbietet. In Wirklichkeit sind leere Strukturen wiederum durch die Grammatik verboten. So ist eine buchstäblich leere Struktur (wie in Ihrer Frage) ein Syntaxfehler, kein undefiniertes Verhalten. Das obige Zitat aus dem Standard gilt für eine andere Situation: eine Struktur mit keine benannten Mitglieder. Eine Struktur kann bis nicht leer ist, aber zugleich ohne benannten Mitglieder enden, wenn alle Mitglieder sind unbenannte bitfields

struct S { 
    int : 5; 
}; 

Im obigen Fall ist das Verhalten nicht definiert ist. Darüber spricht das obige Zitat.

Verwandte Themen