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

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。
  • 逻辑与&&是短路求值规则:只有前面的表达式为真,才会执行后面的表达式。
    1. 第一次执行:printf("%d",x)打印1,返回成功打印的字符数1(判定为真);接着x++ < N,此时x是1,比较结果为真,x自增为2;最后触发main()调用,进入新一轮的main()执行流程。
    2. 每一轮递归都会重复「打印当前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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:42:16