Да, определение «выражения» в стандарте C неполно, но не так, чтобы вызывать какие-либо реальные проблемы (кроме как у привередливых людей, таких как я).
Слово «выражение»в цитируемом вами тексте выделен курсивом, что означает, что это официальное определение термина. Из других частей стандарта ясно, что 123
, например, является выражением: это десятичная константа , которая является целочисленной константой , которая является константа , которая является первичным выражением `, которая является постфиксным выражением , которая (пропуская несколько шагов) является выражением .
Это , а не"последовательность операторов и операндов". Нет оператора, который подразумевает, что 123
не является операндом (это можно продемонстрировать, обратившись к определениям оператора и операнда в другом месте в стандарте).
На практике я никогда не слышал ни о ком, ни о компиляторе, ни о компиляторе, ни о программисте на Си, у которого были бы какие-либо реальные трудности из-за этого неполного определения. Реализаторы компилятора ссылаются на грамматику языка. Программисты на C, вероятно, достаточно хорошо понимают, что такое «выражение», прежде чем читать стандарт.
Мне бы хотелось, чтобы определение expression было обновлено в новой редакции стандарта. ,Определение, которое относится к грамматике, а не к английскому описанию, ИМХО было бы улучшением.
Но если оно не будет обновлено, мы все продолжим использовать выражения без проблем.
Что касается C ++, Ответ Никола Боласа правильно указывает на то, что стандарт C ++ не имеет формального определения «выражения», как в стандарте C. Он имеет аналогичную формулировку в верхней части раздела 8: «Выражение представляет собой последовательность операторов и операндов, которые определяют вычисление». - но слово «выражение» не выделено курсивом, и это предложение является частью «Записки» и поэтому ненормативно. В C ++ стандарт определяет синтаксические выражения.