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语句:
- 先把
i初始化为1; - 检查
i<=10是否成立,成立就执行大括号里的printf,输出当前i的值; - 执行
i++让i加1; - 重复步骤2-3,直到
i变成11时,i<=10不成立,循环终止。
最终会连续输出1到10,结果是12345678910。
Program 2的运行机制
这里for循环末尾多了个分号;——在C语言里,单独的分号代表空语句(什么都不执行的语句)。这相当于把空语句设成了for循环的循环体,后面的大括号和printf跟for循环完全没关系,是循环结束后才会执行的独立代码:
- 初始化
i=1; - 检查
i<=10,成立就执行空语句(啥也不干); - 执行
i++让i加1; - 重复步骤2-3,直到
i变成11时,循环终止; - 循环结束后,执行大括号里的
printf,此时i的值是11,所以只会输出11。
分号改变输出的核心原因
分号是C语言里语句的结束标记,for循环后面加了分号,就把循环体变成了空语句,原本要循环执行的printf被排除在循环之外,变成只在循环结束后执行一次的代码,这直接导致了两段代码的输出差异。
内容的提问来源于stack exchange,提问作者Pooshan Goud
相关产品推荐
相关产品推荐

