先看这样一段代码,你认为是对的还是错的呢?
enum boolean{true,false};
boolean bl=false;
乍一看还真以为是对的,其实,这样写是错的,boolean 未定义。
报错如下:
应该这样定义 enum boolean b1=false;
,但是如果非要用 boolean 来定义变量的话,就需要对其重定义了
如:typedef enum boolean boolean;
,
也就是说我们想直接用枚举名来定义变量需要两步
①:定义枚举类型
enum boolean{true,false};
②:对枚举变量名重定义
typedef enum boolean boolean;
接着就可以用枚举名定义变量了,但是,这其实也可以一步搞定
如下:
typedef enum boolean {
false = 0, true = !false
} boolean;
再来看看人家的解释吧
举个例子说明一下:
#include <stdio.h>
enum DAY1
{
MON1=1, TUE1, WED1, THU1, FRI1, SAT1, SUN1
};
/*
enum DAY1
{
MON1=1, TUE1, WED1, THU1, FRI1, SAT1, SUN1
} day1; //定义枚举类型的同时定义枚举变量也可以
*/
enum DAY2
{
MON2=10, TUE2, WED2, THU2, FRI2, SAT2, SUN2
};
typedef enum DAY2 DAY2;
typedef enum boolean {
false = 0, true = !false
} boolean;
int main()
{
enum DAY1 day1; //若是用DAY1 day1 则是错误的
DAY2 day2; //已经对DAY2 重定义过,正确
boolean b = false; //boolean重定义过了,所以可以
if(b == true)
{
// 遍历枚举元素
for (day1 = MON1; day1 <= SUN1; day1++) {
printf("枚举元素1:%d \n", day1);
}
}
else if(b == false)
{
// 遍历枚举元素
for (day2 = MON2; day2 <= SUN2; day2++) {
printf("枚举元素2:%d \n", day2);
}
}
}
运行结果: