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++?
Antwort
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.
- 1. C# -Strukturdefinitionen für Protocol Analyzer
- 2. Leere Konstruktoren in C++:
- 3. Leere Struktur in C
- 4. Scopes in leere Funktion C++
- 5. Leere, VOID, C und C++
- 6. Warum kompiliert dies in C, aber nicht in C++ (sigaction)?
- 7. wglCreateContext in C# fehlgeschlagen, aber nicht in verwaltetem C++
- 8. Schafft extern C mit C++ undefiniertes Verhalten, das in C, aber nicht in C++ zulässig ist?
- 9. Einbinden in leere C++ - Implementierung mit C++/CLI-Ereignissen
- 10. Funktion Zeigerzuweisung funktioniert in C, aber nicht C++
- 11. wie mit c Leere in Julia v0.4
- 12. Warum sind leere Ausdrücke in C/C++ zulässig?
- 13. erstellen Sie eine leere BitmapSource in C#
- 14. C# - leere Daten in einer Sammlung ausfüllen
- 15. \ c Escape-Sequenz in Mann aufgeführt, aber unbekannt in C
- 16. Verwenden Sie (leere) C# -Codebausteine?
- 17. Externe C/C++ - Bibliothek nicht in C#
- 18. C++ leere Klasse oder typedef
- 19. Stored Procedure funktioniert in DB, aber nicht in C# Code
- 20. C: Funktion über Leere Rückkehr *
- 21. Compile Neudeklaration Fehler von globalen Variablen in C++, aber nicht in C
- 22. Warum sind mehrere Inkremente/Dekremente in C++, aber nicht in C gültig?
- 23. Zeiger auf Array von nicht näherer Größe "(* p) []" illegal in C++, aber legal in C
- 24. Eclipse C/C++ zeigt Fehler, aber kompiliert?
- 25. Subsetting auf alle, aber leere grep gibt leere Vektor
- 26. sizeof leere Struktur ist 0 in C und 1 in C++ warum?
- 27. Laden der C++ DLL nicht in C#
- 28. C++ std :: ofstream flush() aber nicht schließen()
- 29. C++ fstream Gebäude, aber nicht ausgeführt
- 30. Statische Funktion deklariert, aber nicht in C++ definiert
Es kompiliert gut mit gcc 4.2 ... – Vladimir
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
einer der Kommentare von diesem Link: "Leere Strukturen sind eine GCC-Erweiterung.". Danke :) – Vladimir