Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能解释一下这些C代码吗?_C - Fatal编程技术网

有人能解释一下这些C代码吗?

有人能解释一下这些C代码吗?,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 } 如何在c89中a==1和b==0以及c99中b==1 我想知道a的返回值a是1,而b的返回值在c89和c99中是如何变化的?c89和c99行为之间的差异是

代码:

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  
}
如何在
c89
a==1
b==0
以及
c99
b==1


我想知道
a
的返回值
a
是1,而
b
的返回值在
c89
c99
中是如何变化的?

c89和c99行为之间的差异是由于
enum
定义在范围内。在gcc中,对于C89,内部定义对
返回b
有效,而在C99中,外部定义对
返回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());
}
#包括
枚举{a=5,b=6};
int不同(void)
{
if(sizeof(enum{b=7,a=8})!=sizeof(int))
返回a;
返回b;
}
int main()
{
printf(“%d\n”,不同());
}

在gcc中,C89模式给出7,C99模式给出6。

好的,您可以添加更多细节吗?到目前为止,我无法正确理解您的问题。IIRC,其他C也是。@AshishAhuja sizeof(enum{b,a})是4,sizeof(int)也是4,这意味着如果(4!=4),则返回a;,a的值如何为1?这是一个范围问题。在C中,
enum
值总是从
0
开始,除非显式重写。但是,在C89中,您将获得内部
enum
值,而在C99中,您将获得外部
enum
值。