gcc如何评估分数超过分数?

时间:2013-05-15 14:18:08

标签: c

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

3 个答案:

答案 0 :(得分:3)

C标准(和C ++标准)表示,一旦确定优先级,就会从左到右评估运算符。如果编译器知道可以在不影响实际结果的情况下完成操作,则可以优化操作,但如果结果[在标准的定义行为内]受到影响,它会改变结果,那么它将无效。特别是,如果在编译时已知所有值,则可以期望将小常量优化为更大的值。

换句话说,应计算((a / b)/ c)/ d。

- 垫

答案 1 :(得分:3)

乘法运算符都是左关联的,如语法(N1570)所示:

6.5.5乘法运算符
语法
1
multiplicative-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