列挙型 | C言語

列挙型は連続した整数定数を定義する型です。マクロでも定数定義は可能ですが、列挙型を使うと意味のある定数グループを定義できます。

[基本形]

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言語の列挙型は万能ではないのです。
目次