enumとは文字列と数字を関連付けられる機能です。
コードを読みやすくするために使われます。
enumとは?いつ使うの?
enumは列挙型とも呼ばれます。
enumを使うと文字列と数字を関連付けられ、コードが読みやすくなります。
人間にとっては文字列で書いてあった方がわかりやすいけど、プログラム的には数字として扱う方が都合がいいといった場合に使います。
例えば製品の動作確認をした結果を合格と不合格に分けるとします。
プログラム内で結果をPass、Failのように文字列で扱うとデータが大きくなりますし、switch文が使えないなど不便です。
一方、合格は0、不合格は1というように数字で扱えば文字例よりデータは小さいですし、switch文で使えたり配列のインデックスとして使えたりと扱いやすくなります。
しかし数字を見ただけではどちらが合格なのかわかりにくいです。
enumを使えばPass、Failのように文字例で書けるのでどちらが合格か見分けられます。
その上Passには0、Failには1が割り当てられるので、そのままswitch文や配列のインデックスとして使えます。
enumの使い方
基本的な使い方
enumの使い方
定義方法:
enum タグ名{メンバ1,メンバ2,...};
宣言方法:
enum タグ名 変数名;
例1:
#include <stdio.h> enum weather { sunny, cloudy, rainy }; void main() { enum weather day1, day2, day3; day1=sunny; day2=cloudy; day3=rainy; printf("day1=%d\n",day1); printf("day2=%d\n",day2); printf("day3=%d\n",day3); }
実行結果
day1=0
day2=1
day3=2
enumのメンバには数字が0, 1, 2,...というように自動的に割り当てられます。
初期値を指定する方法
メンバに割り当てられる数字を指定したい場合は定義時に初期値を代入しておきます。
例2:
#include <stdio.h> enum weather { sunny=1, cloudy, rainy, snowy=10, windy }; void main() { enum weather day1, day2, day3; day1=sunny; day2=cloudy; day3=windy; printf("day1=%d\n",day1); printf("day2=%d\n",day2); printf("day3=%d\n",day3); }
実行結果
day1=1
day2=2
day3=11
値を指定したメンバの次のメンバには連番で番号が割り当てられます。
typedefでenumのコードを簡略化する方法
typedefを使うとenum変数を作るときのコードを簡略化できます。
例3:
#include <stdio.h> typedef enum { sunny, cloudy, rainy }weather; void main() { weather day1; day1=sunny; printf("day1=%d\n",day1); }
実行結果
day1=0
typedefの使い方について詳しくは以下の記事で解説しています。
-
参考【C/C++】typedefとは?構造体(struct)での使い方
C言語においてtypedefを使うと構造体の宣言をスマートに書くことができます。 一方、C++でもtypedefは使えますが、構造体と一緒には使わないです。 typedefとは何かわかりやすく解説 t ...
続きを見る
enumはint型?サイズは?
enum変数のサイズは以下のように取得できます。
例4:
#include <stdio.h> enum weather { sunny, cloudy, rainy }; void main() { enum weather day1; day1=sunny; printf("day1 size=%d\n",sizeof(day1)); }
メモ
day1 size=4
筆者の環境ではint型と同じ4バイトでした。
enumはint型にキャストできる?
例5:
#include <stdio.h> enum weather { sunny, cloudy, rainy }; void main() { enum weather day1; int i1,i2; day1=sunny; i1=day1; //暗黙的型変換 printf("i1=%d\n",i1); i2=(int)day1; //キャスト(明示的型変換) printf("i2=%d\n",i2); }
実行結果
i1=0
i2=0
C言語で行き詰まったら…
-
C言語・C++がわからない時に質問できるサイト・サービス5選
C言語を独学で勉強しているけど内容がイマイチわからない。もはや何がわからないのかもわからない。 C++のエラーが解決できない。ググってもわからない。わかる人に解説してほしい。 こんなお悩みにお答えしま ...
続きを見る