2013-02-23 3 views
-2

Не удается объяснить вывод следующей программы. По моим сведениям, выход должен быть 19, но его запуск дает мне результат 20. Я использовал gcc для компиляции этой программы.Приоритет оператора в C

int main() 
{ 

    int x, y = 5; 

    x = ++y + ++y + --y; 
    printf("%d", x); 

    return 0; 
} 
+5

Ваша программа использует неопределенное поведение. undefined as in: Вы не можете знать, что произойдет. – fuz

+2

никогда не используйте эти выражения. – Arpit

ответ

2

Ваша программа использует неопределенное поведение, как вы изменить y несколько раз между двумя точками последовательности (в вашем случае, конец заявления). Если вы включите предупреждения с -Wall, ваш компилятор, вероятно, даже собирается вас предупредить об этом.

-6

6 + 7 + 6 = 19 так 19 будет ваш выход

+1

Нет. Это неопределенное поведение. Ваш компилятор может вернуть все, что захочет. – fuz

+0

Я предлагаю вам проверить это. Моя машина также дает 20, как указано в вопросе, но это неопределенное поведение, поэтому компилятор будет в пределах своих прав печатать миллион или удалять ваш жесткий диск. – Kevin

+0

@ Кевин: Что случилось с носовыми демонами? – thejh