2010-10-03 2 views
26

mögliche Dubletten:
Empty class in C++
What is the size of an empty struct in C?sizeof leere Struktur ist 0 in C und 1 in C++ warum?

Ich habe irgendwo gelesen, dass Größe eines leeren struct in C++ ist 1. Also dachte ich, es zu verifizieren. Leider habe ich es als C-Datei gespeichert und <stdio.h> Header verwendet und ich war überrascht, die Ausgabe zu sehen. Es war 0.

dass

struct Empty { 

}; 

int main(void) 
{ 
    printf("%d",(int)sizeof(Empty)); 
} 

bedeutet 0 wurde das Drucken, wenn sie als C-Datei kompiliert und 1, wenn sie als C++ Datei kompiliert. Ich möchte den Grund wissen. Ich habe gelesen, dass die Größe der leeren Struktur in C++ nicht Null ist, denn wenn die Größe 0 wäre, hätten zwei Objekte der Klasse die gleiche Adresse, was nicht möglich ist. Wo liege ich falsch?

+4

-1 Nein, Sie didn‘ t kompilieren Sie das als 'C'. – pmg

+3

@Ninad: Haben Sie [this] (http://ideone.com/WAxMI) versucht? –

+2

Wenn Sie Fragen auf dieser Sprachebene stellen, geben Sie bitte den Namen und die Version des Compilers an. –

Antwort

13

Sie können keine leere Struktur in C haben. Dies ist eine syntaktische Constraint-Verletzung. Allerdings erlaubt gcc eine leere Struktur in C as an extension. Des Weiteren ist das Verhalten undefined, wenn die Struktur nicht genannte Mitglied hat, weil

C99 sagt:

Wenn die Struktur-Deklaration-Liste keine benannten Mitglieder enthält, ist das Verhalten nicht definiert ist.

So

struct Empty {}; //constraint violation 

struct Empty {int :0 ;}; //no named member, the behaviour is undefined. 

Und ja Größe einer leeren Struktur ist C++ cannot be zero :)