列挙データ型を定義するときは、列挙データ型が表す ID のセットを 指定します。このセットの各 ID は、列挙型定数 です。
定数の値は、次の方法で判別されます。
C では、列挙型定数に int 型があります。定数式が初期化指定子として
使用されている場合、式の値は int の範囲を超えることはできません (すなわちヘッダー <limits.h>
に定義されているように、INT_MIN 〜 INT_MAX となります)。
C++ では、各列挙型定数には、符号付きまたは符号なし整数の値にプロモート可能な値と、
整数でなくてもよい別個の型が指定されます。
列挙型定数は、整数定数が許可される場所、
または C++ の場合は、列挙型の値が許可される場所であればどこでも使用できます。
各列挙型定数は、列挙が定義されるスコープ内で固有にする必要があります。 次の例では、average と poor の 2 番目の宣言が、コンパイラー・エラーの原因になります。
func() { enum score { poor, average, good }; enum rating { below, average, above }; int poor; }
次のデータ型宣言は、列挙型定数として oats、wheat、barley 、corn、および rice をリストします。 各定数の下の番号は、整数値を表します。
enum grain { oats, wheat, barley, corn, rice }; /* 0 1 2 3 4 */ enum grain { oats=1, wheat, barley, corn, rice }; /* 1 2 3 4 5 */ enum grain { oats, wheat=10, barley, corn=20, rice }; /* 0 10 11 20 21 */
同じ整数を 2 つの異なる列挙型定数に関連付けることができます。 例えば、次の定義は有効です。 ID suspend と hold には、同じ整数値が指定されます。
enum status { run, clear=5, suspend, resume, hold=6 }; /* 0 5 6 7 6 */
関連参照