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