You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

逻辑运算符短路求值在这段C代码中如何表现?为何未出现无限循环?

分析这段C代码的输出逻辑:为什么是XX而非无限循环?

先看这段代码:

#include <stdio.h>

int main()
{
   int x = -2;
   while (x++ || x==0)
   {
      printf("X");
   }
}

要搞清楚输出是XX的原因,得一步步拆解每次循环的执行过程,同时记住逻辑或||的短路求值规则:当左侧表达式的结果为真(非0)时,右侧表达式会直接被跳过,不会执行。

第一次循环

初始x=-2,进入while条件判断:

  1. 先执行x++:这是后置自增,先返回当前值-2(非0,属于“真”),然后x的值变成-1。
  2. 因为左侧已经为真,触发短路求值,右侧的x==0完全不执行。
  3. 整个条件为真,进入循环体,打印第一个X。

第二次循环

此时x=-1,进入条件判断:

  1. 执行x++:返回当前值-1(非0,真),x的值变成0。
  2. 左侧为真,再次触发短路,右侧x==0不执行。
  3. 条件为真,进入循环体,打印第二个X。

第三次循环

此时x=0,进入条件判断:

  1. 执行x++:返回当前值0(属于“假”),然后x的值变成1。
  2. 因为左侧为假,必须执行右侧的x==0来判断整个条件的真假。此时x已经是1了,1==0的结果是假。
  3. 整个条件为假 || 假 = 假,循环终止。

所以最终只会打印两次X,输出XX,并不会进入无限循环。

内容的提问来源于stack exchange,提问作者FreeDragon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 21:42:38