2014-12-03 4 views
-4

Я не могу понять вывод следующего кода, может кто-нибудь помочь мне?Директивы препроцессоров

#define PRODUCT(x) (x*x) 
main() 
{ 
    int i=3,j,k; 
    j=PRODUCT(i++); 
    k=PRODUCT(++i); 
    printf("\n %d%d",j,k); 
} 

Для выше я получил результат, как:

9 и 49

Я не могу понять, как 49 приходит и когда я закомментировать

k=PRODUCT(++i); 

Я получил вывод как 25. Не знаю, что происходит в програме m

+2

ahhh. идеальное неопределенное поведение ... –

+0

Когда вы не понимаете код, который содержит макросы, первым шагом является их расширение вручную. (Если вы используете макросы вообще, конечно, чего вы не должны.) –

+0

Возможный дубликат http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points –

ответ

1

Макросы делают замену текста. PRODUCT(i++) - до (i++*i++). Помимо необычайного удивления, что в настоящее время существуют две модификации i, это также неопределенное поведение, потому что две модификации не секвенированы.

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