法大奥山研究室

 previous  contents

4.4. 列挙体 enum


 型指定子の中で整数型に属するものとして「列挙型」(enumerated type)があります。

enum(列挙体,enumeration)

enum タグ {const1, const2,...};
enum タグ 変数名 = 列挙定数;

{ } 内の「列挙体メンバ」const1const2 は,列挙定数(enumeration constant)と呼ばれ,整数定数や文字定数と同様に int型の定数として扱われます。[C99, 6.4.4, 1 & 6.4.4.3] const1 には 0 が入り,以下 12 といった具合に連続した整数が入ります。タグ は列挙体を特定化するために付す識別子です。変数 変数名 の型は enum タグ(列挙体タグ型)ですが,データとしては列挙定数のすべての値が収まる整数型(例えば,int型)で,処理系依存です。[C99, 6.7.2.2, 4]

/* Example 4.5 */

#include <stdio.h>

int main(void)
{
       enum weekday {sun, mon, tue, wed, thu, fri, sat};
       enum weekday day = tue;
       printf("weekday = %d\n", day);
       return 0;
}

実行結果です。

weekday = 2

タグを外した宣言も可能です。

enum {const1, const2,...} 変数名 = 列挙定数;

この場合,変数名enum {const1, const2,...}型です。

/* Example 4.6 */

#include <stdio.h>

int main(void)
{
       enum {sun, mon, tue, wed, thu, fri, sat} weekday = tue;
       printf("weekday = %d\n", weekday);
       return 0;
}

ただ単に,整数の定数の作成にも利用できます。

enum {const1, const2,...};
/* Example 4.7 */

#include <stdio.h>

int main(void)
{
       enum {a, b, c, d = 5, e, f};
       printf("c + e = %d\n", c + e);
       return 0;
}

実行結果です。

c + e = 8

a0b1c2 が入ります。d には 5 が入り,以下 67 と入ります。


 previous  contents