逻辑运算符短路求值在这段C代码中如何表现?为何未出现无限循环?
分析这段C代码的输出逻辑:为什么是XX而非无限循环?
先看这段代码:
#include <stdio.h> int main() { int x = -2; while (x++ || x==0) { printf("X"); } }
要搞清楚输出是XX的原因,得一步步拆解每次循环的执行过程,同时记住逻辑或||的短路求值规则:当左侧表达式的结果为真(非0)时,右侧表达式会直接被跳过,不会执行。
第一次循环
初始x=-2,进入while条件判断:
- 先执行
x++:这是后置自增,先返回当前值-2(非0,属于“真”),然后x的值变成-1。 - 因为左侧已经为真,触发短路求值,右侧的
x==0完全不执行。 - 整个条件为真,进入循环体,打印第一个
X。
第二次循环
此时x=-1,进入条件判断:
- 执行
x++:返回当前值-1(非0,真),x的值变成0。 - 左侧为真,再次触发短路,右侧
x==0不执行。 - 条件为真,进入循环体,打印第二个
X。
第三次循环
此时x=0,进入条件判断:
- 执行
x++:返回当前值0(属于“假”),然后x的值变成1。 - 因为左侧为假,必须执行右侧的
x==0来判断整个条件的真假。此时x已经是1了,1==0的结果是假。 - 整个条件为
假 || 假 = 假,循环终止。
所以最终只会打印两次X,输出XX,并不会进入无限循环。
内容的提问来源于stack exchange,提问作者FreeDragon
相关产品推荐
相关产品推荐

