2016-02-17 3 views
7

Код:Может ли кто-нибудь объяснить этот код?

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==0 в c89 и b==1 в c99?

Я хочу знать, как значение a взамен a 1 и возвращаемое значение b изменений в c89 и c99?

+0

Ну, вы можете добавить больше деталей? На данный момент я не могу правильно понять ваш вопрос. –

+1

IIRC, так же как и другие C. –

+0

@AshishAhuja sizeof (enum {b, a}) равен 4, а sizeof (int) также равен 4, что означает, что (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()); 
} 

В НКУ, режим C89 дает 7 и режим C99 дает 6.

Смежные вопросы