Ответ 1
Это эффект работы оператора запятой, последний элемент - тот, который используется как значение оператора. Таким образом, вы получили следующее:
a += (a += 3, 5, a)
Сначала оценивается a+=3
, это делает a=4
, этот результат отбрасывается, затем оценивает 5
, тогда этот результат отбрасывается, затем оценивает a
и сохраняет его как последний элемент. Результатом (a += 3, 5, a)
является последний элемент, который равен 4.
Затем вы получаете
a += 4
поэтому a
8
.
Важное примечание: это артефакт того, как ваш компилятор сгенерировал код. Стандарт C не гарантирует порядок выполнения для назначения a
в этой ситуации. См. Ответ haccks для получения дополнительной информации об этом.