代码:
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
为 1,返回值为 b
c89
的变化和 c99
?
最佳答案
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。
关于有人可以解释这些 C 代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35456957/