基于短路逻辑运算的条件执行

时间:2015-07-15 17:26:16

标签: c short-circuiting

由于逻辑运算符&&||的评估被定义为"短路",我假设以下两段代码是等价的:

p = c || do_something();

if (c) {
   p = true;
}
else {
   p = do_something();
}

给定pcbooldo_something()是返回bool可能有副作用的函数。根据C标准,可以依靠假设片段是等效的吗?特别是,拥有第一个片段,是否承诺如果c为真,则该函数不会被执行,并且不会产生副作用?

2 个答案:

答案 0 :(得分:2)

经过一番搜索,我会自己回答我的问题: C99 standard 6.5.14逻辑OR运算符部分表示:

  

与按位|不同运算符,||运营商保证   从左到右的评价;之后有一个序列点   评估第一个操作数。如果第一个操作数比较不相等   为0,不评估第二个操作数。

关于&&的类似部分。 所以答案是肯定的,代码可以被认为是等效的。

答案 1 :(得分:1)

是的,你的想法是正确的。如果c || do_something()c,则true会短路,因此永远不会致电do_something()

但是,如果cfalse,则会调用do_something(),其结果将是p的新值。