C enum(列挙型)

列挙型は C 言語における基本的なデータ型の一つで、離散的な値を持つ定数のグループを定義するために使用されます。データをより簡潔で読みやすくすることができます。

列挙型は通常、プログラム内の関連する定数のグループに名前を付けるために使用され、プログラムの可読性と保守性を高めます。

列挙型を定義するには、次を使用する必要がありますenumキーワードの後には、列挙型の名前、そして中括弧{}で囲まれた一連の列挙定数。各列挙定数は識別子で表すことができ、整数値を指定することもできます。指定しない場合、デフォルトで0始まり、増加します。

列挙型の構文定義の形式は次のとおりです:

enum 枚举名 {枚举元素1,枚举元素2,……};

次に例を挙げます。たとえば、1週間は7日あります。列挙型を使わない場合、各整数に別名を定義するために #define を使用する必要があります:

#define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7

これだとコード量が多くなります。次に列挙型を使用する方法を見てみましょう:

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

この方がより簡潔に見えませんか?

注意:最初の列挙メンバーのデフォルト値は整数型の 0 です。後続の列挙メンバーの値は、前のメンバーの値に 1 を加えたものです。この例では、最初の列挙メンバーの値を 1 に定義し、2 番目を 2 にし、以降同様にします。

列挙型を定義するときに、列挙子の値を変更できます:

enum season {spring, summer=3, autumn, winter};

値が指定されていない列挙子の値は、前の列挙子の値に 1 を加えたものになります。つまり、spring の値は 0、summer の値は 3、autumn の値は 4、winter の値は 5 です。

列挙型変数の定義

先ほどは列挙型を宣言しただけなので、次に列挙型変数の定義方法を見ていきましょう。

次の3つの方法で列挙型変数を定義できます。

1. 列挙型を定義してから、列挙型変数を定義する

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

2. 列挙型の定義と同時に列挙型変数を定義する

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

3. 列挙型の名前を省略して、直接列挙型変数を定義する

enum
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

例

#include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; int main() { enum DAY day; day = WED; printf("%d",day); return 0; }

上記の例の出力結果は次のとおりです:

3

C 言語では、列挙型は int または unsigned int 型として扱われるため、C 言語の仕様に従うと列挙型を走査する方法はありません。

ただし、いくつかの特別な場合には、列挙型が連続していれば、条件付きで走査を実現できます。

次の例では for を使用して列挙子を走査します:

例

#include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day; int main() { // 列挙子を走査 for (day = MON; day <= SUN; day++) { printf("列挙子:%d\n", day); } }

上記の例の出力結果は次のとおりです:

枚举元素:1 
枚举元素:2 
枚举元素:3 
枚举元素:4 
枚举元素:5 
枚举元素:6 
枚举元素:7

次の列挙型は連続していません。このような列挙型は走査できません。

enum
{
    ENUM_0,
    ENUM_10 = 10,
    ENUM_11
};

switch 内での列挙型の使用:

例

#include <stdio.h> #include <stdlib.h> int main() { enum color { red=1, green, blue }; enum color favorite_color; /*ユーザーは数字を入力して色を選択します*/ printf("好きな色を入力してください: (1. red, 2. green, 3. blue):"); scanf("%u", &favorite_color); /*出力結果*/ switch (favorite_color) { case red: printf("あなたの好きな色は赤です"); break; case green: printf("あなたの好きな色は緑です"); break; case blue: printf("あなたの好きな色は青です"); break; default: printf("あなたは好きな色を選択していません"); } return 0; }

上記の例の出力結果は次のとおりです:

请输入你喜欢的颜色: (1. red, 2. green, 3. blue): 1
你喜欢的颜色是红色

整数を列挙型に変換する

次の例では、整数を列挙型に変換します:

例

#include <stdio.h> #include <stdlib.h> int main() { enum day { saturday, sunday, monday, tuesday, wednesday, thursday, friday } workday; int a = 1; enum day weekend; weekend = ( enum day ) a; // 型変換 //weekend = a; // エラー printf("weekend:%d",weekend); return 0; }

上記の例の出力結果は次のとおりです:

weekend:1
その他の拡張