列挙型enumとは?

以下のような構造体みたいな共用体みたいな見た目のやつ。

これってなんだ??

enum
{
    ADD,
    MULTI,
    VAL
} type;

これは、列挙型と呼ばれるもので、数字のリストを作るための機能。

構造体(全員別々のメモリを持つ)や共用体(全員で同じメモリを共有する)とは、全くの別物

列挙型enumの特徴とメモリ

単なるint型の変数が1つあるだけ。

enum
{
    ADD,   // 自動的に 0 になる
    MULTI, // 自動的に 1 になる
    VAL    // 自動的に 2 になる
} type;

このように書くと、

ADD = 0, MULT = 1, VAL = 2という数値が自動的に入る。

typeはただの変数名で、intを入れるための箱。

`int num = 1;`って書く時のnumと同じ。

列挙型を使うメリット

①「コンピュータにとっては処理が速い数字(int)のまま、人間にとっては直感的に読めるコードにできる」という両者のいいとこ取りができる 。

if (type == 0) と書くより、if (type == ADD) と書いた方が、「ここは足し算の処理だな」と後から見ても一目でわかる(可読性の向上) 。

例えば列挙型を使わなければ、

if(type == 0){
}else if(type == 1){
}else if(type == 1){
}

のように書く必要があり、0って何?1って何?…となる。

でも列挙型を使ったら

if(type == ADD){
}else if(type == MULT){
}else if(type == VAL){
}

のように読むときにわかりやすい。

テストコード

実際にintが出力されるのを確かめる

enum
{
	A,
	B,
	C
} alpha;

int	main(void)
{
	alpha = B;
	printf("%d\n", alpha);
}

alphaというint型の変数で、A(0)、B(1)、C(2)を持っている。
printfで実際にBを出力してみると1が出力される。