【发布时间】:2012-02-23 06:19:15
【问题描述】:
在 C99 标准中,表达式允许优先级和关联性。
由于运算符在文档中出现的顺序是递减的优先级,因此优先级得到了很好的记录,因此函数调用位于乘法运算符之前,而乘法运算符又位于加法运算符之前。
但是,我找不到对关联性的明确描述,无论是左还是右。这一点很重要,因为35/5*2 将是14 对于一个变体(35/5)*2 和3 对于另一个变体35/(5*2)。
部分6.5 Expressions /3, footnote 74状态:
语法规定了表达式求值中运算符的优先级,与本小节主要小节的顺序相同,最高优先级在前。
在每个主要子条款中,运算符具有相同的优先级。每个子句中讨论的表达式的语法都指示了左或右关联性。
但是,以乘法为例:
6.5.5 乘法运算符
语法multiplicative-expression:cast-expressionmultiplicative-expression * cast-expressionmultiplicative-expression / cast-expressionmultiplicative-expression % cast-expression
约束
每个操作数都应具有算术类型。%运算符的操作数应 有整数类型。
语义
对操作数执行通常的算术转换。
二进制*运算符的结果是操作数的乘积。/运算符的结果是第一个操作数除以 第二;%运算符的结果是余数。在这两种操作中,如果 第二个操作数为零,行为未定义。
整数相除时,/运算符的结果是与任意整数的代数商 小数部分被丢弃。如果商a/b是可表示的,则表达式(a/b)*b + a%b应等于a。
我看不到任何提及关联性的内容,标准的其他地方似乎也没有任何默认设置。
我错过了什么吗?
【问题讨论】:
标签: c iso associativity