2016-02-17 97 views
7

代碼:有人可以解釋這些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 
} 

如何在c89a==1b==0c99b==1

我想知道的回報aa價值如何爲1個,在c89c99b改變返回值?

+0

好了,你可以添加更多的細節?截至目前,我無法正確理解你的問題。 –

+1

IIRC,其他C也是如此。 –

+0

@AshishAhuja sizeof(enum {b,a})是4,sizeof(int)也是4,這意味着if(4!= 4)然後返回a; a的值是1的值? – user123456987

回答

9

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

相關問題