Größe der leeren Struktur ist 0 in C und 1 in C++, warum? [duplicate]
Lesezeit: 2 Minuten
Ninad Page
Mögliche Duplikate:
Leere Klasse in C++
Wie groß ist eine leere Struktur in C?
Ich habe irgendwo gelesen, dass die Größe einer leeren Struktur in C++ 1 ist. Also dachte ich daran, es zu überprüfen. Leider habe ich es als C-Datei gespeichert und verwendet <stdio.h> Header und ich war überrascht, die Ausgabe zu sehen. Es war 0.
Das bedeutet
struct Empty {
};
int main(void)
{
printf("%d",(int)sizeof(Empty));
}
druckte 0 wenn als C-Datei kompiliert und 1 wenn es als C++-Datei kompiliert wird. Ich will den Grund wissen. Ich habe das gelesen sizeof leere Struktur in C++ ist nicht Null, denn wenn die Größe wäre 0 dann hätten zwei Objekte der Klasse die gleiche Adresse, was nicht möglich ist. Wo liege ich falsch?
Wenn Sie Fragen zu diesem Sprachniveau stellen, geben Sie bitte den Namen und die Version des Compilers an.
– Andy Dent
3. Oktober 2010 um 10:18 Uhr
Dies ist ein Superduplikat. Für C, Duplikat davon (Antwort: es ist schlecht geformt). In C++ dies (Antwort: Es muss eine Größe größer als Null haben, damit Platz dafür zugewiesen werden kann).
– GManNickG
3. Oktober 2010 um 10:21 Uhr
-1 von mir auch. die sizeof kann nicht kompiliert werden
– Johannes Schaub – litb
3. Oktober 2010 um 11:15 Uhr
Prasun Saurav
Sie können in C keine leere Struktur haben. Es ist eine syntaktische Beschränkungsverletzung. gcc erlaubt jedoch eine leere Struktur in C als Erweiterung. Weiterhin ist das Verhalten nicht definiert wenn die Struktur kein benanntes Mitglied hat, weil
C99 sagt:
Wenn die Strukturdeklarationsliste keine benannten Mitglieder enthält, ist das Verhalten undefiniert.
So
struct Empty {}; //constraint violation
struct Empty {int :0 ;}; //no named member, the behaviour is undefined.
Es gibt mehrere gute Gründe. Dies soll unter anderem sicherstellen, dass Zeigerarithmetik über Zeiger auf diese Struktur nicht zu einer Endlosschleife führt. Mehr Informationen:
-1 Nein, Sie haben das nicht als kompiliert
C
.– pmg
3. Oktober 2010 um 10:13 Uhr
@Ninad: Hast du es versucht Dies?
– Prasun Saurav
3. Oktober 2010 um 10:17 Uhr
Wenn Sie Fragen zu diesem Sprachniveau stellen, geben Sie bitte den Namen und die Version des Compilers an.
– Andy Dent
3. Oktober 2010 um 10:18 Uhr
Dies ist ein Superduplikat. Für C, Duplikat davon (Antwort: es ist schlecht geformt). In C++ dies (Antwort: Es muss eine Größe größer als Null haben, damit Platz dafür zugewiesen werden kann).
– GManNickG
3. Oktober 2010 um 10:21 Uhr
-1 von mir auch. die sizeof kann nicht kompiliert werden
– Johannes Schaub – litb
3. Oktober 2010 um 11:15 Uhr