C 依赖链式if语句

C 依赖链式if语句,c,if-statement,C,If Statement,让我们以C代码为例: int ID = 0; if( (Check(&ID) == ERROR) ||(ID == -1) ){ return ERROR; } 您是否保证在(ID=-1)之前(检查(&ID)==ERROR)已检查 (ID=-1将是一个错误状态,由函数Check设置)是的。对于形式为x | | y的表达式,只有当x的计算结果为0时,y才被计算 这称为短循环,也适用于&& 你的括号也是多余的:这同样适用于等价物(而且,在我看来,更清楚) if(Check(

让我们以C代码为例:

int ID = 0;
if(  (Check(&ID) == ERROR) 
   ||(ID == -1)
){
   return ERROR;
}
您是否保证在
(ID=-1)
之前
(检查(&ID)==ERROR)
已检查


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

是的。对于形式为
x | | y
的表达式,只有当
x
的计算结果为0时,
y
才被计算

这称为短循环,也适用于
&&

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

if(Check(&ID)=ERROR | | ID==-1)
是,因为对
|
运算符的第一个和第二个操作数求值之间有一个序列点

5.1.2.3程序执行,第3段规定:

序列点的存在 在表达式A和B的求值之间,意味着每个值的计算 与A相关的副作用在每次计算值和副作用之前排序 与B

N1570 6.5.14逻辑或运算符,第4段规定:

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