列挙型とは
列挙型は連続する定数を定義する型です。
列挙体ともいいます。
列挙型で定義される定数をメンバと言い、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の値として用いることがあります。
値を直接書くよりもわかりやすくなります。
https://tunasalmon.com/2016/07/19/%e5%88%86%e5%b2%90%e5%87%a6%e7%90%86/
enum_sample3.c
switch(month)
{
case 0:【処理】;
case 1:【処理】;
case 2:【処理】;
…
}
enum_sample4.c
switch(month)
{
case JAN:【処理】;
case FEB:【処理】;
case MAR:【処理】;
…
}
こちらの例の方が意味を理解しやすいでしょう。
余談ですが、慣習として列挙型に限らず定数は大文字で書くことが多いです。
これは変数と見分けるためかと思われます。
(adsbygoogle = window.adsbygoogle || []).push({});

