枚举(enum)通过一种简单的途径,把一串名字与一串整形值联系在一起。可以代替#define声明 。但优点是#define定义的名字在编译时被丢弃,而枚举名字则通常在调试器中可见,可以在调试代码时使用它们。
使用举例
第一种表示方法:
#include<stdio.h>
enum DAY
{
MON = 1,//给出初值以后从该值开始往后依次加一
TUE,
WED,
THU,
FRI,
SAT,
SUN
};
enum ORDER
{
AA,//给出初值以后从0开始往后依次加一
BB,
CC
};
int yesterday = (int)MON;//这个强制转化不能省略,否则报错
int today = (int)TUE;
int tomorrow = (int)WED;
int aa = (int)AA;
int bb = (int)BB;
int cc = (int)CC;
int x = 10, y = 20, z = 30;
void main()
{
printf("%d %d %d \n", x, y, z); //输出:10 20 30
printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3
printf("%d %d %d \n", MON, TUE, WED); //输出:1 2 3
printf("%d %d %d \n", aa, bb, cc); //输出:1 2 3
}
第二种表示方法:
#include<stdio.h>
enum
{
saturday,
sunday = 0,
monday,
tuesday,
wednesday,
thursday,
friday
} workday; //变量workday的类型为枚举型enum DAY
void main()
{
printf("%d \n", thursday); //输出4,这里可以直接输出任意一个枚举变量
}
第三种方法:用typedef关键字将枚举类型定义成别名:
#include<stdio.h>
enum DAY
{
MON = 1,//给出初值以后从该值开始往后依次加一
TUE,
WED,
THU,
FRI,
SAT,
SUN
};
typedef enum
{
mon,
thu,
}day;
void main()
{
int i = 0;
//下边这样没有用typedef定义的不可以正常输出
DAY eeType = (DAY)i;
switch (eeType)
{
case MON:
{
printf("%d \n", MON);
break;
}
case THU:
{
printf("%d \n", THU);
break;
}
default:
break;
}
//下边这样用typedef定义的可以正常输出
day eType = (day)i;
switch (eType)
{
case mon:
{
printf("%d \n", mon);
break;
}
case thu:
{
printf("%d \n", thu);
break;
}
default:
break;
}
}