如果数组中只填充了0
,这段代码是否会导致未定义的行为?
或者编译器可以检查一些不太关键的条件,例如“首先检查自动非指针值”
uiaDigit[10];
for (sizeIndexI = 0; sizeIndexI < 10 && uiaDigit[sizeIndexI] == 0; sizeIndexI++)
;
我想应该是阅读方向
“和比较总是从左到右读取,并在第一个错误时中断”
最多是实现定义的行为,不是吗?
所以,如果
sizeIndexI
得到10,编译器是否会得到必须中断的结果,或者他是否会比较'uiaDigit[10]==0'? 最佳答案
对于&&
运算符,计算是从左到右进行的。因此,如果要跳过指针操作,请将其放在表达式的最右侧。
C标准“6.5.13逻辑与运算符”
4与按位二进制运算符不同,&&运算符保证从左到右求值;
第一个操作数求值后有一个序列点。如果第一个操作数
比较等于0,则不计算第二个操作数。