【发布时间】:2014-12-07 03:09:10
【问题描述】:
我已阅读函数参数中表达式的求值顺序,并且二元运算符在 C 中未定义。这意味着什么以及何时应该注意它?
【问题讨论】:
-
你知道“evaluation of [an] expression[s]”是什么意思吗?
标签: c
我已阅读函数参数中表达式的求值顺序,并且二元运算符在 C 中未定义。这意味着什么以及何时应该注意它?
【问题讨论】:
标签: c
不要依赖它。如果你有这样的代码:
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);
【讨论】:
这是一个简化的例子:
SomeCall( Writefile( handle ) , Closefile( handle ) ) ;
未指定调用这两个函数的顺序,您可以在写入文件之前关闭文件,即使调用的顺序在逻辑上看起来是正确的。
【讨论】: