对于代码:
void main()
{
enum a{a,b ,MAX};
printf("%d",MAX);
}
Run Code Online (Sandbox Code Playgroud)
为什么输出2
在这种情况下?
输出为2,因为MAX为2.枚举用于创建常量的名称.在C中,如果未在枚举中明确指定项目的值,则该值为0(如果它是第一个项目,或者大于前一个项目的值).因此,在这种情况下:a
是0,b
是1,MAX
是2.
仅供参考:枚举就像一堆#define
s,除了值不需要是常数.假设您使用GNU C,请参阅GNU C手册中有关枚举的条目.
就分配给标识符的值而言,C99标准可以这样说(部分6.7.2.2/3
):
枚举器列表中的标识符声明为具有int类型的常量,并且可以出现在允许的位置.枚举器
=
将其枚举常量定义为常量表达式的值.如果第一个枚举器没有=
,则其枚举常量的值为0.每个后续的枚举器都没有=
将其枚举常量定义为通过将1加到前一个枚举常量的值而得到的常量表达式的值.枚举器的使用=
可能会产生枚举常量,其值与同一枚举中的其他值重复.