首页 > 解决方案 > 有人可以解释这个 C 程序的输出吗?

问题描述

#include <stdio.h>

int main()
{
    static int i = 5;

    if (--i)
    {
        main();
        printf("%d\n", i); // will this line executes ?
    }

    return 0;
} 

输出:

0
0
0
0

是否在 main() 下编写代码;每次当主递归调用发生并从该程序终止时执行时,printf 语句指令都会被放入堆栈?

标签: c

解决方案


i通过连续调用 来减少,main直到达到零。

然后 printf为每个级别的递归调用。

(请注意,main虽然在 C 中不明智,但从自身调用的行为是明确定义的,但在 C++ 中,行为是未定义的。)


推荐阅读