2010-10-03 22 views
26

Doublons possibles:
Empty class in C++
What is the size of an empty struct in C?sizeof structure vide est 0 en C et 1 en C++ pourquoi?

je lu quelque part que la taille d'un struct vide en C++ est 1. Donc, j'ai pensé à vérifier. Malheureusement, je l'ai enregistré en tant que fichier C et utilisé en-tête <stdio.h> et j'ai été surpris de voir la sortie. Il était 0.

Cela signifie

struct Empty { 

}; 

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

imprimait 0 lorsqu'il est compilé sous forme de fichier C et 1 lorsqu'il est compilé sous forme de fichier C++. Je veux savoir la raison. J'ai lu que sizeof structure vide dans C++ n'est pas zéro parce que si la taille était 0 deux objets de la classe auraient la même adresse qui n'est pas possible. Où ai-je tort?

+4

-1 Non, vous n » t compiler cela comme 'C'. – pmg

+3

@Ninad: Avez-vous essayé [this] (http://ideone.com/WAxMI)? –

+2

Lorsque vous posez des questions à ce niveau de langage, veuillez inclure le nom et la version du compilateur. –

Répondre

13

Vous ne pouvez pas avoir une structure vide dans C. Il s'agit d'une violation de contrainte syntaxique. Cependant gcc autorise une structure vide dans C as an extension. De plus, le comportement est indéfini si la structure n'a pas membre nommé parce

C99 dit:

Si la liste struct-déclaration ne contient pas de membres nommés, le comportement est indéfini.

Alors

struct Empty {}; //constraint violation 

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

Et oui taille d'un struct vide est cannot be zero C++ :)