列挙型とは、整数定数に名前をつけて取り扱うことができる型です。
例えば、「登録」、「更新」、「削除」などのステータスがあった場合に、よくプログラム上でそれらを識別するのに「登録」は、「0」「更新」は「1」、「削除」は「2」といった取り決めをしてコーディングしますが、#define定義や変数などを使用しなくてもわかりやすい名称を整数定数として取り扱う事ができる型の事です。(実際はコンパイル時に自動的に各名称に対して整数値が振り分けられています。)
列挙型を使用するには、構造体や共用体と同様、まずその定義を行い、それを一つの型として宣言します。
列挙型の定義は次の通りです。
enum タグ名 {列挙定数1, 列挙定数2, ・・・} 変数名;
※タグ名と変数名はどちらか一方のみ省略可能です。
enum タグ名 変数名;
宣言と同時に値を代入(初期化)するとき。
enum タグ名 変数名 = 列挙定数;
列挙型を定義すると列挙定数には自動的に先頭から0, 1, 2, ・・・と整数が振られていきますが、次のように列挙定数に振り分ける整数を指定する事が出来ます。この場合、整数値が重複することがありますが許可されています。
enum タグ名 {列挙定数1=int型の値, 列挙定数2, ・・・} 変数名;
またC言語の仕様では定義がないためコンパイラー依存になりますが、列挙型変数にたいして列挙定数ではなく整数を代入する事も可能です。
但し、こういった使い方はもはや列挙型の存在意義が失われる恐れがある為注意が必要だと思います。
・サンプルを使って実際に使用方法を確認します。
・サンプルソース(sample1001.c)
#include <stdio.h> enum Status { INSERT, /* 登録 */ UPDATE, /* 更新 */ DELETE /* 削除 */ }; int main() { enum Status status = UPDATE; /* 列挙型statusの変数宣言 */ switch(status) { case INSERT: printf("登録します。"); break; case UPDATE: printf("更新します。"); break; case DELETE: printf("削除します。"); } return 0; }
・実行結果
C:\dev\c>sample1001 [Enter]
更新します。