如何在gcc中评估a/b/c/d
形式的表达式?它是(a*d) / (b*c)
还是( ( (a/b) / c) / d )
? C标准中是否有规则?
答案 0 :(得分:3)
C标准(和C ++标准)表示,一旦确定优先级,就会从左到右评估运算符。如果编译器知道可以在不影响实际结果的情况下完成操作,则可以优化操作,但如果结果[在标准的定义行为内]受到影响,它会改变结果,那么它将无效。特别是,如果在编译时已知所有值,则可以期望将小常量优化为更大的值。
换句话说,应计算((a / b)/ c)/ d。
- 垫
答案 1 :(得分:3)
乘法运算符都是左关联的,如语法(N1570)所示:
6.5.5乘法运算符
语法的
1multiplicative-expression: cast-expression multiplicative-expression * cast-expression multiplicative-expression / cast-expression multiplicative-expression % cast-expression
所以它将被解析为
((a / b) / c) / d
答案 2 :(得分:2)
操作顺序:
a / b / c / d就像它说:((a / b)/ c)/ d