列挙型とは
列挙型は連続する定数を定義する型です。
列挙体ともいいます。
列挙型で定義される定数をメンバと言い、1つ目のメンバから順番に0,1,2…と定数値が割り当てられていきます。
使い方
enum 【キー名】{【メンバ】,…}【変数名】;
変数名は省略できます。
その場合は
enum 【キー名】 【変数名】;
と、通常の変数の宣言と似たような形で定義できます。
以下がサンプルコードです。
enum_sample.c
#include <stdio.h> enum month { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }; int main(void) { enum month i = OCT; printf("%d\n", i); return 0; }
このように、数字の並びを文字で表現したいときに使います。
また、
enum_sample1.c
enum month { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };
と書くと、0からではなく1から始まります。
値を途中から変更することができます。
enum_sample2.c
enum month { JAN , FEB, MAR, APR, MAY, JUN, JUL = 10, AUG, SEP, OCT, NOV, DEC };
と書くと、JANから順に0,1,2,,3,4,5,10,11…となります。
応用
主な用途として、swtch文のcaseの値として用いることがあります。
値を直接書くよりもわかりやすくなります。
enum_sample3.c
switch(month) { case 0:【処理】; case 1:【処理】; case 2:【処理】; … }
enum_sample4.c
switch(month) { case JAN:【処理】; case FEB:【処理】; case MAR:【処理】; … }
こちらの例の方が意味を理解しやすいでしょう。
余談ですが、慣習として列挙型に限らず定数は大文字で書くことが多いです。
これは変数と見分けるためかと思われます。