评估顺序何时重要

时间:2014-10-12 12:11:06

标签: c

我已经阅读了函数参数中表达式的评估顺序,并且在C中未定义二元运算符。这意味着什么,何时应该小心它?

2 个答案:

答案 0 :(得分:3)

只是不要依赖它。如果您有以下代码:

func(a(), b(), c());

然后,a()b()c()的执行顺序对于程序的正确性无关紧要。如果确实如此(例如,如果a()打开资源而c()关闭它),那么您在此处有一些危险。

最简单的解决方法是编写如下代码:

int a_result = a();
int b_result = b();
int c_result = c();
func(a_result, b_result, c_result);

答案 1 :(得分:1)

这是一个简化的例子:

SomeCall( Writefile( handle ) , Closefile( handle ) ) ;

在未指定的情况下调用这两个函数的顺序是什么,您甚至可以在写入之前关闭该文件,即使调用的顺序在逻辑上看起来是正确的。