C 依赖链式if语句
让我们以C代码为例: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(
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,则第二个操作数为
未评估