enum型指定子の中で整数型に属するものとして「列挙型」(enumerated type)があります。
■enum(列挙体,enumeration)
enum タグ {const1, const2,...};
enum タグ 変数名 = 列挙定数;
{ } 内の「列挙体メンバ」const1 や const2 は,列挙定数(enumeration constant)と呼ばれ,整数定数や文字定数と同様に int型の定数として扱われます。[C99, 6.4.4, 1 & 6.4.4.3] const1 には 0 が入り,以下 1,2 といった具合に連続した整数が入ります。タグ は列挙体を特定化するために付す識別子です。変数 変数名 の型は 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
a に 0,b に 1,c に 2 が入ります。d には 5 が入り,以下 6,7 と入ります。