代码
enum {a, b};
int different(void)
{
if (sizeof (enum {b, a}) != sizeof (int))
return a; // a == 1
return b; // b == 0 in C89, b == 1 in C99
}
如何在
a==1
和b==0
中c89
和b==1
?我想知道
c99
的返回值a
是1,而a
的返回值在b
和c89
中是如何变化的? 最佳答案
c89和c99行为之间的差异是由于enum
定义在范围内。在gcc中,对于c89,内部定义对return b
有效,而在c99中,外部定义对return b
有效。
在下面的示例中可以更清楚地看到这一点:
#include <stdio.h>
enum {a=5, b=6};
int different(void)
{
if (sizeof(enum {b=7, a=8}) != sizeof(int))
return a;
return b;
}
int main()
{
printf("%d\n", different());
}
在gcc中,c89模式给出7,c99模式给出6。