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

标签 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==1b==0c89b==1c99

我想知道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/

相关文章:

使用 c89 和 c99 编译 gcc 4.4.2 默认为 c99 吗?

c - 下面的函数对给定的卡号执行 Luhn 算法,但会引发某些卡号的运行时错误。试图理解为什么?

c++ - 在结构指针中传递值

c - 在 C 中打印位置数字系统

C 中的字符数

c - 如何使用指针将值读入结构?

c - Linux C 中的定时器中断

更改 char* 数组中的一个字符而不转换为 char[][]

c - 将未计算的表达式传递给 C/C++

c - 在 C 中修剪 -PI 和 +PI 之间的数字的最快方法是什么?