列挙型は連続した整数定数を定義する型です。マクロでも定数定義は可能ですが、列挙型を使うと意味のある定数グループを定義できます。
[基本形]
enum {
列挙子1,
列挙子2,
列挙子3 // 最後のカンマは不要
};
[例]
enum {
MONDAY, // 0
TUESDAY, // 1
WEDNSDAY, // 2
THURSDAY, // 3
FRIDAY, // 4
SATURDAY, // 5
SUNDAY // 6
};
- 列挙型のサイズはint型と同値です。int型より大きい整数定数を定義したい場合は、マクロを使用してください。
目次
値を途中でスキップする
列挙型で表す整数値は、無指定の場合は0からの連番です。これを途中から値をスキップさせることができます。値をスキップさせた場合、それ以降はまた連番となります。
enum {
BLACK, // 0
BROWN, // 1
RED, // 2
ORANGE = 10, // 10
YELLOW, // 11
GREEN // 12
};
列挙型変数を定義
構造体と同じように、列挙型も変数の型として定義できます。
typedef enum {
BLACK, // 0
BROWN, // 1
RED, // 2
ORANGE, // 3
YELLOW, // 4
GREEN // 5
} COLOR_CODE;
void func(void) {
COLOR_CODE resistor = BLACK;
...
}
- 上記例で定義した列挙型は0~5のみです。しかしこのregistorに6以上の整数値を代入することもできてしまいます。C言語の列挙型は万能ではないのです。