枚举我有这样的枚举:我们使用在C
enum Seasons{
winter,spring,summer,autumn
};
什么将这段代码呢?
enum Seasons curr_season;
curr_season = autumn;
curr_season = 19;
谢谢!
枚举我有这样的枚举:我们使用在C
enum Seasons{
winter,spring,summer,autumn
};
什么将这段代码呢?
enum Seasons curr_season;
curr_season = autumn;
curr_season = 19;
谢谢!
enum Seasons{
winter,spring,summer,autumn
};
上面创建以下
winter=0, spring=1, summer=2 and autumn=3
注:enums
只是整数! ..它也可以带负数!
enum Seasons curr_season;
curr_season = autumn;
/* curr_season will now have 3 assigned */
curr_season = 19;
/* curr_season will now have 19 assigned */
你可以运行下面的代码来检查这个!
#include <stdio.h>
enum Seasons{
winter,spring,summer,autumn
};
void print_seanons(void)
{
printf("winter = %d \n", winter);
printf("spring = %d \n", spring);
printf("summer = %d \n", summer);
printf("autumn = %d \n", autumn);
return;
}
int main(void)
{
enum Seasons curr_season;
print_seanons();
curr_season = autumn;
printf("curr_season = %d \n", curr_season);
curr_season = 19;
printf("curr_season = %d \n", curr_season);
return 0;
}
枚举常数是在C int
类型。虽然enum
s为未明确int
类型,并且int
小号枚举类型之间的转换,是无声的。通常没有约束的枚举检查,所以你的代码在功能上等同于:
int curr_season;
curr_season = 3;
curr_season = 19;
枚举常数是int类型的,但是枚举类型是实现定义整数类型。 – ouah 2012-01-03 16:21:38
'enum'不是'int'类型。 – 2012-01-03 16:21:49
但在c中,它们可以自由转换为int – 2012-01-03 16:27:00
枚举是整数值,所以它会值19分配给curr_season
。
交叉使用(将整数值指派给一个枚举)被认为是实践编程差,应该避免。
有你自己尝试过吗?如果你想知道某件事情是什么,那不是一个坏起点。 – 2012-01-03 16:17:48
它不会“做”任何事情;没有副作用。但它是完全合法的C. – 2012-01-03 16:18:24
如果你的编译器选择,使枚举足够宽,能够采取0〜19(最有可能),你的代码将覆盖值'autumn'(同'3'的范围值)在'curr_season'对象中用'19';否则就是UB,任何事情都可能发生。 – pmg 2012-01-03 16:18:24