我已经阅读了函数参数中表达式的评估顺序,并且在C中未定义二元运算符。这意味着什么,何时应该小心它?
答案 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 ) ) ;
在未指定的情况下调用这两个函数的顺序是什么,您甚至可以在写入之前关闭该文件,即使调用的顺序在逻辑上看起来是正确的。