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

for循环末尾加与不加分号的差异及代码运行机制解析

两段C语言for循环代码的运行差异解析

先看两段代码的完整实现:

Program 1(无末尾分号)

#include<stdio.h>
int main()
{
  int i;
  for(i=1;i<=10;i++)
  {
    printf("%d",i);
  }
}

Program 2(有末尾分号)

#include<stdio.h>
int main()
{ 
 int i;
 for(i=1;i<=10;i++);
 {
   printf("%d",i);
 }
}

Program 1的运行机制

C语言里for循环的语法是for(初始化; 条件; 更新) 循环体,这里的循环体是大括号{}包裹的printf语句:

  1. 先把i初始化为1;
  2. 检查i<=10是否成立,成立就执行大括号里的printf,输出当前i的值;
  3. 执行i++让i加1;
  4. 重复步骤2-3,直到i变成11时,i<=10不成立,循环终止。
    最终会连续输出1到10,结果是12345678910。

Program 2的运行机制

这里for循环末尾多了个分号;——在C语言里,单独的分号代表空语句(什么都不执行的语句)。这相当于把空语句设成了for循环的循环体,后面的大括号和printf跟for循环完全没关系,是循环结束后才会执行的独立代码:

  1. 初始化i=1;
  2. 检查i<=10,成立就执行空语句(啥也不干);
  3. 执行i++让i加1;
  4. 重复步骤2-3,直到i变成11时,循环终止;
  5. 循环结束后,执行大括号里的printf,此时i的值是11,所以只会输出11。

分号改变输出的核心原因

分号是C语言里语句的结束标记,for循环后面加了分号,就把循环体变成了空语句,原本要循环执行的printf被排除在循环之外,变成只在循环结束后执行一次的代码,这直接导致了两段代码的输出差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:50:02