【发布时间】:2013-03-08 21:27:11
【问题描述】:
使用 -Wall -pedantic
#include <limits.h>
#include <stdio.h>
int main(void)
{
enum x {
a,
max = INT_MAX,
out_1
};
enum y {
b,
out_2 = INT_MAX + 1
};
printf("%d %d\n", out_1, out_2);
return 0;
}
叮当声返回
demo.c:9:3: warning: overflow in enumeration value
out_1
^
如你所见,编译器并没有警告out_2溢出,他的值在编译时是未知的?
【问题讨论】:
-
相当肯定标准没有定义
enum的范围。 -
我的猜测:它首先评估 INT_MAX+1,它会环绕并将其分配给 out_2。
-
@johnny:不,它调用了 UB。