C99 standardowe
N1265 C99 draft mówi się 6.7.2.2/3 "specyfikatorami Enumeration"
numerator z = określa jego wyliczenie stałej jako wartość stałej ekspresji. Jeśli pierwszy moduł wyliczający nie ma wartości =
, jego stała wyliczeniowa wynosi 0. Każdy kolejny moduł wyliczający o numerze = określa swoją stałą wyliczenia jako wartość wyrażenia stałego otrzymanego przez dodanie 1 do wartości poprzedniej stałej wyliczeniowej. (Zastosowanie rachmistrzów z = może wytwarzać stałe wyliczenia z wartościami, które powielają inne wartości w tym samym wyliczeniu.)
więc zawsze po trzyma zgodnych implementacji:
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);
Tak, jest to wymagane przez standardy i jestem pewien, że ktoś będzie w stanie je zacytować. – Nemo