如何a/b/c/d
在 gcc 中评估表单的表达式?会(a*d) / (b*c)
还是会( ( (a/b) / c) / d )
?C标准中是否有此规则?
问问题
128 次
3 回答
3
C 标准(和 C++ 标准)说,一旦确定了优先级,就会从左到右计算运算符。如果编译器知道可以在不影响实际结果的情况下这样做,则编译器可以优化操作,但如果[在标准定义的行为范围内]结果受到影响以至于它改变了结果,它将是无效的。特别是,如果在编译时所有值都已知,您可以期望将小常量优化为更大的常量。
换句话说,应该计算((a/b)/c)/d。
-- 垫子
于 2013-05-15T14:21:42.517 回答
3
乘法运算符都是左结合的,如语法 ( N1570 ) 所示:
6.5.5 乘法运算符
语法
1乘法表达式: cast-expression 乘法表达式* cast-expression乘法表达式/ cast-expression 乘法表达式% cast-expression
所以它会被解析为
((a / b) / c) / d
于 2013-05-15T14:26:44.723 回答
2
操作顺序:
a/b/c/d 就像它说的: ((a/b)/c)/d
于 2013-05-15T14:19:15.807 回答