2010-10-03 10 views
26

duplicados posibles:
Empty class in C++
What is the size of an empty struct in C?sizeof estructura vacía es 0 en C y 1 en C++ ¿por qué?

he leído en alguna parte que el tamaño de una estructura vacía en C++ es 1. Así que pensé en la verificación de la misma. Lamentablemente lo guardé como un archivo C y usé el encabezado <stdio.h> y me sorprendió ver el resultado. Fue 0.

Eso significa

struct Empty { 

}; 

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

estaba imprimiendo 0 cuando se compila como un archivo de C y 1 cuando se compila como un archivo de C++. Quiero saber el motivo. Leí que el tamaño de la estructura vacía en C++ no es cero porque si el tamaño fuera 0 dos objetos de la clase tendrían la misma dirección que no es posible. ¿Dónde estoy equivocado?

+4

-1 No, no lo hiciste t compilar eso como 'C'. – pmg

+3

@Ninad: ¿Intentó [esto] (http://ideone.com/WAxMI)? –

+2

Cuando haga preguntas en este nivel de idioma, incluya el nombre y la versión del compilador. –

Respuesta

13

No puede tener una estructura vacía en C. Es una violación de restricción sintáctica. Sin embargo, gcc permite una estructura vacía en C as an extension. Además, el comportamiento es indefinido si la estructura no tiene ningún miembro nombrado porque

C99 dice:

Si la lista de estructura-declaración no contiene miembros nombrados, el comportamiento es indefinido.

Así

struct Empty {}; //constraint violation 

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

Y el tamaño sí de una estructura vacía es C++ cannot be zero :)