2011-06-22 13 views

Odpowiedz

92

Tak. Jeśli w definicji wyliczenia nie określono inaczej, początkowy moduł wyliczający zawsze ma wartość zero, a wartość każdego kolejnego modułu wyliczającego jest większa od poprzedniego modułu wyliczającego.

+10

i to identyczne zachowanie jest wymagane przez C i C++. W języku C++ jest to "[dcl.enum]": "Jeśli pierwszy moduł wyliczający nie posiada inicjalizatora, wartość odpowiedniej stałej wynosi zero.Zawierająca definicję bez inicjalizatora daje modułowi wyliczającemu wartość uzyskaną przez zwiększenie wartości poprzedni moduł wyliczający o jeden. " –

+2

Tak, a także inne języki zaczynające się na literę C, na przykład C#. –

44

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); 
-12

Tak, wartość enum bydefult zacznij od 0 do n-tego elementu na dowolną platformę.

+9

Zastanów się, jak twoja odpowiedź dodaje do puli odpowiedzi. To znaczy, w jaki sposób twoja nowa odpowiedź (5 lat później) dodaje coś nowego, czego nie obejmuje inna odpowiedź? Na pierwszy rzut oka wydaje się mniej informatywny niż pozostałe dwie odpowiedzi. – LawfulEvil

+0

Ehhh @LawfulEvil relax. Wiele odpowiedzi pozwala ludziom spojrzeć na to w przyszłości z wielu perspektyw. To powiedziawszy, jest to źle sformułowana, niewiarygodna odpowiedź, ale liczne odpowiedzi same w sobie nie są złe. –

Powiązane problemy