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