2012-01-03 81 views
0

枚举我有这样的枚举:我们使用在C

enum Seasons{ 
    winter,spring,summer,autumn 
    }; 

什么将这段代码呢?

enum Seasons curr_season; 
curr_season = autumn; 
curr_season = 19; 

谢谢!

+6

有你自己尝试过吗?如果你想知道某件事情是什么,那不是一个坏起点。 – 2012-01-03 16:17:48

+0

它不会“做”任何事情;没有副作用。但它是完全合法的C. – 2012-01-03 16:18:24

+0

如果你的编译器选择,使枚举足够宽,能够采取0〜19(最有可能),你的代码将覆盖值'autumn'(同'3'的范围值)在'curr_season'对象中用'19';否则就是UB,任何事情都可能发生。 – pmg 2012-01-03 16:18:24

回答

4
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; 

} 
3

枚举常数是在C int类型。虽然enum s为未明确int类型,并且int小号枚举类型之间的转换,是无声的。通常没有约束的枚举检查,所以你的代码在功能上等同于:

int curr_season; 
curr_season = 3; 
curr_season = 19; 
+1

枚举常数是int类型的,但是枚举类型是实现定义整数类型。 – ouah 2012-01-03 16:21:38

+0

'enum'不是'int'类型。 – 2012-01-03 16:21:49

+0

但在c中,它们可以自由转换为int – 2012-01-03 16:27:00

0

枚举是整数值,所以它会值19分配给curr_season

交叉使用(将整数值指派给一个枚举)被认为是实践编程差,应该避免。

相关问题