Я читал, Может ли кто-нибудь объяснить эти поведения undefined (i = я ++ + ++ i, я = я ++ и т.д.) и попытался понимание Последовательности точек на "comp.lang.c FAQ" после траты более 2 часов времени, пытаясь объяснить следующие результаты gcc-компилятором.
expression(i=1;j=2) i j k
k = i++ + j++; 2 3 3
k = i++ + ++j; 2 3 4
k = ++i + j++; 2 3 4
k = ++i + ++j; 2 3 5
k = i++ + i++; 3 2
k = i++ + ++i; 3 4
k = ++i + i++; 3 4
k = ++i + ++i; 3 6
i = i++ + j++; 4 3
i = i++ + ++j; 5 3
i = ++i + j++; 4 3
i = ++i + ++j; 5 3
i = i++ + i++; 4
i = i++ + ++i; 5
i = ++i + i++; 5
i = ++i + ++i; 6
Вопрос:
-
Я хочу знать, имеют ли все показанные выражения (в 4 группах) на приведенном выше рисунке поведение undefined? Если только некоторые из них имеют поведение undefined, какие из них выполняются, а какие - нет?
-
Для определенных выражений поведения, любезно, вы можете показать (не объяснять), как компилятор их оценивает. Просто, чтобы убедиться, что если я получил это предварительное приращение и post increment правильно.
Фон:
Сегодня я посетил интервью в кампусе, в котором меня попросили объяснить результаты i++ + ++i
для заданного значения i
. После компиляции этого выражения в gcc я понял, что ответ, который я дал в интервью, был неправильным. Я решил не делать такую ошибку в будущем и, следовательно, попытался собрать все возможные комбинации операторов pre и post increment и скомпилировать их в gcc, а затем попытаться объяснить результаты. Я боролся более двух часов. Я не мог найти одно поведение оценки этих выражений. Итак, я сдался и повернулся к stackoverflow. После небольшого количества архивов чтения выяснилось, что есть что-то вроде поведения sequence point
и undefined.