2011-06-22 10 views

答えて

92

はい。列挙型の定義で別途指定しない限り、最初の列挙子は常に値0を持ち、後続の各列挙子の値は前の列挙子よりも大きい値です。

+10

であり、CとC++の両方で同じ動作が必要です。 C++では '[dcl.enum]'です: "最初の 列挙子に初期化子がない場合、対応する定数の値はゼロです。列挙子定義 は、初期化子がないと列挙子に以前の列挙子は1つ。 " –

+2

はい、そしてC#のように文字Cで始まる他の言語もあります。 –

44

C99標準

N1265 C99 draftは6.7.2.2/3 "列挙指定子"

で=定数式の値としての列挙定数を定義すると列挙子を言います。最初の列挙子が=でない場合、その列挙定数の値は0です。no = の各列挙子は、その列挙定数を前の列挙定数の値に1を加算した定数式の値として定義します。 (=と列挙子の使用は、同じ列挙内の他の値を重複値で列挙定数を生成してもよい。)

そこで常に以下に準拠実装で成り立つ

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

はい、列挙値bydefult 0からn番目の要素から任意のプラットフォームに開始します。

+9

回答が回答のプールにどのように追加されるかを考慮してください。つまり、あなたの新しい答え(5年後)は、別の答えでカバーされていない新しいものをどのように追加しますか?一見すると、それは他の2つの回答よりも有益ではないようです。 – LawfulEvil

+0

Ehhh @LawfulEvilはリラックスしています。複数の答えは、今後これを複数の視点で見ている人々に与えます。つまり、これはフォーマットの悪い、有益ではない回答ですが、それ自体での十分な答えは悪くありません。 –

関連する問題