Größe der leeren Struktur ist 0 in C und 1 in C++, warum? [duplicate]

Lesezeit: 2 Minuten

Benutzeravatar von Ninad Page
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?

  • -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

Benutzeravatar von Prasoon Saurav
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.

Und ja, die Größe einer leeren Struktur ist C++ kann nicht Null sein 🙂

Benutzeravatar von vog
Vog

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:

http://bytes.com/topic/c/insights/660463-sizeof-empty-class-structure-1-a

Hier ist ein wunderbarer Artikel, der beschreibt, warum dies passiert, und, was noch relevanter ist, einen (sicheren) Weg, es zu umgehen 🙂

http://www.cantrip.org/emptyopt.html

1398390cookie-checkGröße der leeren Struktur ist 0 in C und 1 in C++, warum? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy