C言語 | 構造体宣言 | 列挙型 - enum

列挙型は名前付きの整数定数を定義します。関連する値の集合を扱うときに便利です。

名前付き定数

enum で列挙型を宣言します。

enum Message { MSG_YES, MSG_NO };

最初に省略した値は 0 になり、以降は1ずつ増えます。値を明示すると、その後の連番も変わります。

enum Message { MSG_YES, MSG_NO, MSG_OK = 8, MSG_CANCEL };

この場合、MSG_CANCEL9 です。

#include <stdio.h>

enum Message { MSG_OK, MSG_YES = 2, MSG_NO };

int main(void) {
  enum Message msg = MSG_NO;
  printf("MSG_OK = %d : MSG_YES = %d : MSG_NO = %d\n",
         MSG_OK, MSG_YES, msg);
  return 0;
}

列挙子は定数であり、構造体のメンバではありません。Message.MSG_OK ではなく MSG_OK と書きます。Cコンパイラは宣言されていない整数値も受け入れる場合があるため、値の検証はプログラマの責任です。

列挙型は、1つの関数で複数の関連する動作を扱うときに便利です。

enum { MSG_OK, MSG_YESNO };
enum { ID_OK = 1, ID_YES, ID_NO };

メッセージ関数は MSG_OK または MSG_YESNO に応じて処理を分岐し、対応する識別子を返せます。