¿Cuál es el tamaño de una enumeración en C?


Answers

Tomado del Estándar C actual (C99): http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

6.7.2.2 Especificadores de enumeración
[...]
Restricciones
La expresión que define el valor de una constante de enumeración debe ser una expresión constante constante que tiene un valor representable como int.
[...]
Cada tipo enumerado debe ser compatible con caracteres, un tipo entero con signo o un tipo entero sin signo. La elección del tipo está definida por la implementación, pero debe ser capaz de representar los valores de todos los miembros de la enumeración.

No es que los compiladores sean buenos para seguir el estándar, pero esencialmente: si su enumeración contiene algo más que un int, está en un profundo "comportamiento no respaldado que puede volver a morderlo en un año o dos".

Question

Estoy creando un conjunto de valores enum, pero necesito que cada valor enum tenga 64 bits de ancho. Si recuerdo correctamente, una enumeración es generalmente del mismo tamaño que una int; pero pensé que leí en alguna parte que (al menos en GCC) el compilador puede hacer que la enumeración tenga el ancho que necesitan para mantener sus valores. Entonces, ¿es posible tener una enumeración de 64 bits de ancho?




El tamaño de almacenamiento no está influenciado por la cantidad de valores en la enumeración. El tamaño de almacenamiento está definido por la implementación, pero principalmente es el tamaño de sizeof(int) .




No tenemos control sobre el tamaño de una variable enum. Depende totalmente de la implementación, y el compilador da la opción de almacenar un nombre para un entero usando enum, por lo que enum sigue el tamaño de un entero.