computer:c:tips:evaluation_order
求值顺序(Evaluation order)
C语言中,某些运算的顺序是确定的,而其他运算的顺序则不确定。
例如表达式:
f(a) < f(b) && f(c) > f(d)
这里f(a) < f(b)会先计算,根据比较结果才决定是否执行f(c) > f(d)(参见:逻辑与/或操作符的注意事项)。但在f(a) < f(b)这个子表达式中,编译器可能先计算f(a),也可能先计算f(b),或者两者同时并行求值(某些机器上),此时求值顺序是不确定的。
具体的说,只有如下四个操作符规定了求值顺序:
- 逻辑与&&;
- 逻辑或||;
- ?:三元条件表达式;
- ,逗号表达式。
需要注意的是,包含逗号的函数参数列表并不是逗号表达式(此时的逗号是分隔符),参数之间的求值顺序是不确定的。如函数f(a, b),先计算a还是b是不确定的。
在实际编程过程中,对没有明确规定求值顺序的操作要特别注意,不能主观假设某种求值顺序。
computer/c/tips/evaluation_order.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1