在 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
。
我在那里看不到任何提到关联性的东西,标准中的其他地方似乎也没有任何默认设置。
我在这里错过了什么吗?