2011-09-07 11 views
10

es el tamaño de una enumeración siempre el mismo entre los diferentes compiladores (gcc, visual c y otros?). Es decir, ¿sizeof() de una enumeración específica da los mismos valores con cada compilador que sigue los estándares de C/C++?Tamaño de las enumeraciones en bytes de compiladores diferentes

+0

Y la firma también puede variar. –

Respuesta

14

No.

Tanto en C y C++ una enumeración tendrá un tamaño tal que todos los valores pueden ser representados y ser compatible con un tipo entero. Los diferentes compiladores pueden usar diferentes algoritmos para elegir el tipo (si no está especificado en otra norma, como un ABI claramente definido). (C++ 11 permite especificar el tipo subyacente con una nueva sintaxis)

+0

No necesariamente: C permite que el tipo de valores de enumeración sea elegido por el compilador, al igual que, de acuerdo con su respuesta, hace C++. Ver la sección 6.7.2.2/4 en [el Estándar C] (http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf). – pmg

+0

Además, en C++ 0x puede usar la nueva * clase enum * para especificar el tipo de entero que se utilizará para respaldar los valores de enumeración. –

+0

@pmg, gracias. No sé de dónde saqué eso. Comprobé que ya era el caso en C90. – AProgrammer

2

"Cada tipo enumerado será compatible con char, un tipo entero con signo , o un tipo entero sin signo. La elección del tipo es definido por la implementación), pero debe ser capaz de representar los valores de todos los miembros de la enumeración. "

"... Una implementación puede retrasar la elección de qué tipo entero hasta que se hayan visto todas las constantes de enumeración."

ISO/IEC 9899: 1999 (E) p.105

Así que sólo tenemos límites superiores para sizeof (ENUM). En la mayoría de los sistemas tenía sizeof (enum) = 4, pero el compilador de STM hizo sizeof (enum) = 1/2/4 según los valores escritos en enumeración

Editar: parece que puede establecer uno de los valores de su enum para max int para garantizar que el compilador elija entero como tamaño de enumeración.

Cuestiones relacionadas