2

如何a/b/c/d在 gcc 中评估表单的表达式?会(a*d) / (b*c) 还是会( ( (a/b) / c) / d )?C标准中是否有此规则?

4

3 回答 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 回答