主要主要

{ static int i=5; if(--i) { main(); printf("%d ",i); } } 

该程序的输出为0 0 0 0

这个程序不应该显示编译错误吗? 我在这里想念的是什么?

首先,我给你的问题+1,因为在我15年的编程中,我从未想过递归调用main()!

现在关于你的问题,它编译,因为main()只是一个函数,就像代码中的任何其他函数。 关于它的唯一特殊之处是链接器期望在代码中看到main(),并且对main()的调用会自动插入到可执行文件中。 (我认为您甚至可以使用链接器开关来定义不同的启动函数名称)。

但除此之外,这是一个正常的function。

main没有什么特别的意思,你不能在你的程序中使用它,但不建议这样做,因为它会混淆你的代码。 (这个可怕的代码赢得了一场难以阅读的竞赛,它称之为自己的主要内容,它在没有警告的情况下进行编译: http : //research.microsoft.com/en-us/um/people/tball/papers/xmasgift/ )

如果您对程序的流程感到困惑,请考虑切换mainprintf

 #include  void main() { static int i=5; if(--i) { printf("%d ",i); main(); } } 

输出为4 3 2 1

编辑:此代码正确使用int main(void)

 #include  int main(void) { static int i=5; if(--i) { printf("%d ",i); main(); } return 0 }