C语言if语句中main()调用的作用?无分号打印1-10代码疑问
无分号打印1-10的C代码中main()调用的作用解析
先看你提供的代码:
#include <stdio.h> int N = 10; int main() { static int x = 1; if( printf("%d", x) && x++ < N && main()) // <-- THIS LINE return 0; }
核心作用:通过递归调用实现循环打印
这段代码里的main()调用是递归触发重复执行逻辑,具体拆解:
static int x = 1是关键:static修饰的局部变量只会在第一次进入main()时初始化一次,后续每次进入main(),x都会保留上一次修改后的数值,不会重置为1。- 逻辑与
&&是短路求值规则:只有前面的表达式为真,才会执行后面的表达式。- 第一次执行:
printf("%d",x)打印1,返回成功打印的字符数1(判定为真);接着x++ < N,此时x是1,比较结果为真,x自增为2;最后触发main()调用,进入新一轮的main()执行流程。 - 每一轮递归都会重复「打印当前x值 → x自增 → 递归调用main()」的操作,直到x自增到10时:
x++ < N中,x是10,比较结果为假,短路求值直接终止后续表达式,不再调用main(),递归到此结束。
- 第一次执行:
为什么去掉main()就只打印1?
去掉main()后,if条件变成printf("%d",x) && x++ < N:
第一次执行时,两个表达式都为真,条件整体为真,会执行return 0直接结束程序,没有后续的重复执行逻辑,所以只打印1。
内容的提问来源于stack exchange,提问作者hmmm Mm
相关产品推荐
相关产品推荐

