Подтвердить что ты не робот

Увеличение по сравнению с точками последовательности

Когда оператор post increment влияет на приращение? Я столкнулся с двумя мнениями:

1) Из http://gd.tuwien.ac.at/languages/c/programming-bbrown/c_015.htm:

POST означает выполнение операции после любого операции присваивания.

2) Ближе домой, ответ на SO (хотя и на С++) говорит:

... что задерживает приращение до конца выражения     (следующая точка последовательности).

Так делает операцию приращения записи...

A) подождите, пока не будет достигнута точка последовательности или

B) происходит после операции присваивания или

C) происходит в любое время до точки последовательности?

4b9b3361

Ответ 1

Правильная интерпретация C, т.е. приращение происходит когда-то до следующей точки последовательности, в частности, в стандарте C (C99, 6.5.2.4, 2) сказано следующее:

Побочный эффект обновления сохраненного значения операнда должен происходить между предыдущей и следующей точки последовательности.

Полная цитата параграфа:

Результатом оператора postfix ++ является значение операнда. После того, как результат Получено, значение операнда увеличивается. (То есть значение 1 соответствующего тип добавляется к нему.) См. обсуждения аддитивных операторов и составное назначение для получения информации о ограничениях, типах и преобразованиях, а также о воздействии операций на указатели. Побочный эффект обновления сохраненного значения операнда должен происходить между предыдущей и следующей точки последовательности.

Ответ 2

Операция post increment всегда возникает перед следующей точкой последовательности независимо от выражения, в котором используется оператор инкремента. См. Эту ссылку для получения дополнительной информации http://en.wikipedia.org/wiki/Sequence_point