2011-06-22 19 views

Respuesta

92

Sí. A menos que especifique lo contrario en la definición de la enumeración, el enumerador inicial siempre tiene el valor cero y el valor de cada enumerador posterior es uno mayor que el enumerador anterior.

+10

y, este comportamiento idéntico es requerido tanto por C como por C++. En C++, es '[dcl.enum]': "Si el primer enumerador no tiene inicializador, el valor de la constante correspondiente es cero. Una definición de enumerador sin un inicializador proporciona al enumerador el valor obtenido al aumentar el valor de el enumerador anterior por uno ". –

+2

Sí, y también otros idiomas que comienzan con la letra C, como C#. –

44

C99 Standard

El N1265 C99 draft dice en 6.7.2.2/3 "especificadores Enumeración"

un empadronador con = define su constante como el valor de la expresión de la constante de enumeración. Si el primer enumerador no tiene =, el valor de su constante de enumeración es 0. Cada enumerador posterior con no = define su constante de enumeración como el valor de la expresión constante obtenida al agregar 1 al valor de la constante de enumeración previa. (El uso de encuestadores con = puede producir constantes de enumeración con los valores que duplican otros valores de la misma enumeración.)

Así que el siguiente siempre se aferra implementaciones conformes:

enum E { 
    E0, 
    E1, 
    E2 = 3, 
    E3, 
    E4 = INT_MAX, 
    /* Compile time error: Overflow in enumeration values */ 
    /*E5*/ 
}; 

/* If unspecified, the first is 0. */ 
assert(E0 == 0); 
assert(E1 == 1); 
assert(E2 == 3); 
/* Continue from the last one. */ 
assert(E3 == 4); 
assert(E4 == INT_MAX); 
-12

Sí, valor de enumeración bydefult comienza desde 0 hasta el n ° elemento de cualquier plataforma.

+9

Considere cómo su respuesta se agrega al grupo de respuestas. Es decir, ¿cómo agrega su nueva respuesta (5 años después) algo nuevo que no está cubierto en otra respuesta? A primera vista, parece ser menos informativo que las otras dos respuestas. – LawfulEvil

+0

Ehhh @LawfulEvil relax. Las respuestas múltiples le dan a las personas que miran esto en el futuro múltiples perspectivas. Dicho esto, esta es una respuesta poco formateada y poco informativa, pero las respuestas amplias en sí mismas no son malas. –

Cuestiones relacionadas