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

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 comstackdor 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?

Una enum solo está garantizada para ser lo suficientemente grande como para contener valores int . El comstackdor puede elegir libremente el tipo real utilizado en función de las constantes de enumeración definidas para que pueda elegir un tipo más pequeño si puede representar los valores que defina. Si necesita constantes de enumeración que no se ajustan a una int , tendrá que usar extensiones específicas del comstackdor para hacerlo.

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 comstackdores 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”.

Si bien las respuestas anteriores son correctas, algunos comstackdores tienen opciones para romper el estándar y usar el tipo más pequeño que contendrá todos los valores.

Ejemplo con GCC :

 enum ord __attribute__ ((__packed__)) { FIRST = 1, SECOND, THIRD, }; STATIC_ASSERT( sizeof(enum ord) == 1 ) 

En lenguaje C, se garantiza que una enum tendrá el tamaño de int. Hay una opción de tiempo de comstackción ( -fshort-enums ) para que sea tan corta (Esto es principalmente útil en caso de que los valores no sean más de 64K). No hay opción de tiempo de comstackción para boost su tamaño a 64 bits.

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 comstackdor da la opción de almacenar un nombre para un entero usando enum, por lo que enum sigue el tamaño de un entero.

Considerar:

 enum value{a,b,c,d,e,f,g,h,i,j,l,m,n}; value s; cout << sizeof(s) << endl; 

Esto dará el resultado como 4. Así que no importa el número de elementos que contenga una enumeración, su tamaño siempre es fijo.