tipos - ¿Los valores enum predeterminados en C son los mismos para todos los compiladores?
tipos enumerados en c (3)
Al declarar una enumeración como se muestra a continuación, ¿todos los compiladores de C establecen los valores predeterminados como x=0
, y=1
z=2
en los sistemas Linux y Windows?
typedef enum {
x,
y,
z
} someName;
Sí, el valor de enum bydefult comienza de 0 a n''th elemento a cualquier plataforma.
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.
Estándar C99
El borrador N1265 C99 dice en 6.7.2.2/3 "Especificadores de enumeración"
Un enumerador con = define su constante de enumeración como el valor de la expresión constante. Si el primer enumerador tiene no
=
, 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 sumando 1 al valor de la constante de enumeración previa. (El uso de enumeradores con = puede producir constantes de enumeración con valores que duplican otros valores en la misma enumeración).
Por lo tanto, lo siguiente siempre se aplica a 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);