有人可以解释这些C代码吗?

时间:2016-02-17 12:37:49

标签: c

代码:

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==0c89以及b==1中的c99如何?

我想知道a返回a的价值是多少,bc89的{​​{1}}的返回值是多少?

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。