代码

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==1b==0c89b==1
我想知道c99的返回值a是1,而a的返回值在bc89中是如何变化的?

最佳答案

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。

10-08 03:03