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);
Sí, es requerido por los estándares, y estoy seguro de que alguien podrá citarlos. – Nemo