Ассоциативность C99 для операторов - где это указано?
В стандарте C99 выражения допускают приоритет и ассоциативность.
Приоритет задокументирован довольно хорошо, поскольку порядок, в котором операторы появляются в документе, имеет меньший приоритет, поэтому вызовы функций предшествуют мультипликативным операторам, которые, в свою очередь, предшествуют аддитивным операторам.
Тем не менее, я не могу найти точное описание ассоциативности, будь то левый или правый Это важно, так как35/5*2
было бы14
для одного варианта(35/5)*2
а также3
для другого варианта35/(5*2)
.
Раздел6.5 Expressions /3, footnote 74
государство:
Синтаксис определяет приоритет операторов при вычислении выражения, который совпадает с порядком основных подпунктов этого подпункта, причем приоритет имеет наивысший приоритет.
Внутри каждого основного подпункта операторы имеют одинаковый приоритет. Ассоциативность влево или вправо указывается в каждом подпункте синтаксисом для обсуждаемых в нем выражений.
Однако, принимая мультипликативный случай, например:
6.5.5 Мультипликативные операторы
Синтаксис
multiplicative-expression:
cast-expression
multiplicative-expression * cast-expression
multiplicative-expression / cast-expression
multiplicative-expression % cast-expression
Ограничения
Каждый из операндов должен иметь арифметический тип. Операнды%
Оператор должен иметь целочисленный тип.
Семантика
Обычные арифметические преобразования выполняются над операндами.
Результат двоичного*
Оператор - произведение операндов.
Результат/
оператор является частным от деления первого операнда на второй; результат%
оператор является остатком. В обеих операциях, если значение второго операнда равно нулю, поведение не определено.
Когда целые числа делятся, результат/
оператор - алгебраический фактор, любая дробная часть которого отбрасывается. Если частноеa/b
представимо, выражение(a/b)*b + a%b
должен быть равенa
.
Я не вижу там ничего, что упоминало бы ассоциативность, и, кажется, нет никаких других настроек по умолчанию где-либо в стандарте.
Я что-то здесь упускаю?