依赖链式if语句

时间:2016-06-16 07:23:15

标签: c if-statement

让我们来看看这个C代码示例:

int ID = 0;
if(  (Check(&ID) == ERROR) 
   ||(ID == -1)
){
   return ERROR;
}

(Check(&ID) == ERROR)之前,您有保证(ID == -1) 检查 吗?

ID = -1将是一个错误状态,由函数Check设置)

2 个答案:

答案 0 :(得分:2)

是的,你这样做。对于x || y形式的表达式,y仅在x求值为0时进行求值。

这称为 short-circutting ,也适用于&&

你的括号也是多余的:同样适用于等价物(在我看来,更清楚)

if (Check(&ID) == ERROR || ID == -1)

答案 1 :(得分:1)

是的,因为评估||运算符的第一个和第二个操作数之间存在序列点

N1570 5.1.2.3程序执行,第3段说:

  

序列点的存在   表达式A和B的评估之间意味着每个值的计算和   在每个值计算和副作用之前,对与A相关的副作用进行排序   与B相关联。

N1570 6.5.14逻辑OR运算符,第4段说:

  

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