代码:
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
返回a
的价值是多少,b
和c89
的{{1}}的返回值是多少?
答案 0 :(得分:8)
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。