C言語,enum型 (列挙型) の挙動(動作)について

スポンサーリンク

鍛錬 302

C言語,enum型 (列挙型) の挙動(動作)について

enum型 (列挙型) について、以下に示す挙動を確認しています。

  1. 全ての列挙定数に値を指定する場合
  2. 先頭の列挙定数のみに値を指定する場合
  3. 値を指定しない場合
  4. 途中の列挙定数から値を指定しない場合
スポンサーリンク

挙動を確認

1. 全ての列挙定数に値を指定する場合

以下は、全ての列挙定数に値を指定しているプログラム enum_test1.c を実行しています。

プログラム

// include
#include <stdio.h>

// enum
enum number {
	ZERO = 0,
	ONE = 1,
	TWO = 2,
	THREE = 3,
	FOUR = 4,
	FIVE = 5
};

// main
int main(void)
{
	printf("ZERO  = %d\n", ZERO);
	printf("ONE   = %d\n", ONE);
	printf("TWO   = %d\n", TWO);
	printf("THREE = %d\n", THREE);
	printf("FOUR  = %d\n", FOUR);
	printf("FIVE  = %d\n", FIVE);
	
	return 0;
}

実行結果

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra enum_test1.c -o enum_test1
***@ubuntu:~/***/test/c$ ./enum_test1
ZERO  = 0
ONE   = 1
TWO   = 2
THREE = 3
FOUR  = 4
FIVE  = 5

 
上記に示した通り、列挙定数に指定した値が印字されています。

2. 先頭の列挙定数のみに値を指定する場合

以下は、先頭の列挙定数のみに値を指定しているプログラム enum_test2.c を実行しています。

プログラム

// include
#include <stdio.h>

// enum
enum number {
	ZERO = 0,
	ONE,
	TWO,
	THREE,
	FOUR,
	FIVE
};

// main
int main(void)
{
	printf("ZERO  = %d\n", ZERO);
	printf("ONE   = %d\n", ONE);
	printf("TWO   = %d\n", TWO);
	printf("THREE = %d\n", THREE);
	printf("FOUR  = %d\n", FOUR);
	printf("FIVE  = %d\n", FIVE);
	
	return 0;
}

実行結果

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra enum_test2.c -o enum_test2
***@ubuntu:~/***/test/c$ ./enum_test2
ZERO  = 0
ONE   = 1
TWO   = 2
THREE = 3
FOUR  = 4
FIVE  = 5

 
上記に示した通り、値が指定されていない列挙定数は、最後に指定された列挙定数から順にインクリメントされます。

3. 値を指定しない場合

以下は、列挙定数に値を指定していないプログラム enum_test3.c を実行しています。

プログラム

// include
#include <stdio.h>

// enum
enum number {
	ZERO,
	ONE,
	TWO,
	THREE,
	FOUR,
	FIVE
};

// main
int main(void)
{
	printf("ZERO  = %d\n", ZERO);
	printf("ONE   = %d\n", ONE);
	printf("TWO   = %d\n", TWO);
	printf("THREE = %d\n", THREE);
	printf("FOUR  = %d\n", FOUR);
	printf("FIVE  = %d\n", FIVE);
	
	return 0;
}

実行結果

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra enum_test3.c -o enum_test3
***@ubuntu:~/***/test/c$ ./enum_test3
ZERO  = 0
ONE   = 1
TWO   = 2
THREE = 3
FOUR  = 4
FIVE  = 5

 
上記に示した通り、列挙定数に値が指定されない場合は、先頭に値 0 が設定され、その後は順にインクリメントされます。

4. 途中の列挙定数から値を指定しない場合

以下は、途中の列挙定数から値を指定していないプログラム enum_test4.c を実行しています。

プログラム

// include
#include <stdio.h>

// enum
enum number {
	ZERO = 0,
	ONE = 1,
	TWO = 9000,
	THREE,
	FOUR,
	FIVE
};

// main
int main(void)
{
	printf("ZERO  = %d\n", ZERO);
	printf("ONE   = %d\n", ONE);
	printf("TWO   = %d\n", TWO);
	printf("THREE = %d\n", THREE);
	printf("FOUR  = %d\n", FOUR);
	printf("FIVE  = %d\n", FIVE);
	
	return 0;
}

実行結果

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra enum_test4.c -o enum_test4
***@ubuntu:~/***/test/c$ ./enum_test4
ZERO  = 0
ONE   = 1
TWO   = 9000
THREE = 9001
FOUR  = 9002
FIVE  = 9003

 
上記に示した通り、途中の列挙定数から値が指定されない場合は、最後に指定された列挙定数から順にインクリメントされます。

タイトルとURLをコピーしました