Ice*_*man 4 c
如果我有这样的条件:
if (X && Y) {}
编译器会检查Y是否X为false?它是编译器依赖的吗?
Y
X
Thi*_*ter 10
在C和大多数其他语言中,保证短路评估.因此Y,仅在X评估为true时进行评估.
这同样适用于X || Y- 在这种情况下Y,仅在X评估为false时进行评估.
X || Y
请参阅Mike的答案,以获取对C规范的引用,其中提到并保证了此行为.
Mik*_*ike 7
C规范(6.5.13)为您澄清了这一点:
4与按位二进制和运算符不同,&&运算符保证从左到右的评估 ; 如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点.如果第一个操作数比较等于0,则不计算第二个操作数.
所以C语言本身定义了如果X == 0那么Y不会被检查.
X == 0
归档时间:
12 年,11 月 前
查看次数:
173 次
最近记录: