2012-02-26 103 views
1
#include <stdio.h> 

enum {AA, BB, CC} s; 

int main() 
{ 
s = 4; 
printf("%d\n",s); 
return 0; 
} 

编译器不给出任何警告并打印4.场景后面发生了什么? s是否被视为int类型?使用整数作为枚举值

+0

相关http://stackoverflow.com/questions/366017/what-is-the-size-of-an-enum-in-c – Bruce 2012-02-26 06:39:37

回答

3

枚举的具体类型是实现特定的,但它通常是int。所以是的,在这种情况下s可能是int。从C规格:

每个枚举类型应与char,有符号整数类型,或一个无符号整数类型兼容。类型的选择是实现定义的,但应能够表示枚举的所有成员的值。枚举类型直到在终止列举程序声明列表之后才是不完整的。

所以你的情况,4肯定会工作,因为它在一个char在我听过的任何机器上的任何符号或无符号整数类型相符。

+0

我如何找到具体的类型。我正在使用gcc。 – Bruce 2012-02-26 06:28:59

+1

检查gcc文档,我猜。你可以使用'sizeof'来获得基线。 – 2012-02-26 06:32:37

+0

谢谢!它说4个字节.. – Bruce 2012-02-26 06:35:29