После того, как наткнулся на вопрос «Почему эти конструкции используют неопределенное поведение до и после инкремента?» сегодня Я решил взять последний черновик следующего стандарта C, который смог найти, и прочитать о нем больше.
Вскоре после того, как я обнаружил следующий абзац в черновике C17:
Выражение - это последовательность операторов и операндов, которая определяет вычисление значения или обозначает объект или функцию, или генерирует побочные эффекты, или выполняет их комбинацию. Вычисления значений операндов оператора последовательно выполняются перед вычислением значения результата оператора
Источник: ISO / IEC 9899: 2017, раздел 6.5 §1« Выражения » (ссылка не работает, используйте web. archive.org)
Теперь я немного запутался. Разве это не означает, что i = i++
- это определенное поведение? Я посмотрел на другой черновик, на этот раз C99:
Выражение - это последовательность операторов и операндов, которая определяет вычисление значения или обозначает объект или функцию, или генерирует побочные эффекты, или выполняет их комбинацию.
Источник: ISO / IEC 9899: 1999, раздел 6.5 §1 «Выражения»
Отсутствует это самое предложение!
Вопросов
- Я что-то неправильно понял?
- Ответы устарели?
- Я посмотрел не на тот черновик?
Примечание. этот вопрос связан с тем, что касается C ++.