【问题标题】:When Is Order Of Evaluation Important评估顺序何时重要
【发布时间】:2014-12-07 03:09:10
【问题描述】:

我已阅读函数参数中表达式的求值顺序,并且二元运算符在 C 中未定义。这意味着什么以及何时应该注意它?

【问题讨论】:

标签: c


【解决方案1】:

不要依赖它。如果你有这样的代码:

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);

【讨论】:

    【解决方案2】:

    这是一个简化的例子:

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

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

    【讨论】:

    • 为什么它“在逻辑上看起来是正确的”?在我看来,您正在做的事情应该没有订单,即不正确。
    • @KerrekSB 因为我们从左到右,然后向下阅读。例如,代码也可以分成单独的行。请记住,OP 不是 c 专家,逻辑确实发挥了作用。
    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多