{
static int i=5;
if(--i)
{
main();
printf("%d ",i);
}
}
此程序的输出为0 0 0 0
。
这个程序不应该显示编译器错误吗?我在这里缺少什么?
答案 0 :(得分:0)
首先,我给你的问题+1,因为在我15年的编程中,我从未想过递归调用main()!
现在关于你的问题,它编译,因为main()只是一个函数,就像代码中的任何其他函数一样。关于它的唯一特殊之处在于链接器期望在代码中看到main(),并且对main()的调用会自动插入到可执行文件中。 (我认为您甚至可以使用链接器开关来定义不同的启动函数名称。)
但除此之外,这是一个正常的功能。
答案 1 :(得分:0)
main
没有什么特别之处,这意味着你不能在你的程序中使用它,但不建议这样做,因为它会混淆你的代码。 (这个可怕的代码赢得了一场难以阅读的比赛,称其为自己的主要内容,并且在没有警告的情况下进行编译:http://research.microsoft.com/en-us/um/people/tball/papers/xmasgift/)
如果您对程序的流程感到困惑,请考虑切换main
和printf
#include <stdio.h>
void main()
{
static int i=5;
if(--i)
{
printf("%d ",i);
main();
}
}
输出为4 3 2 1
修改:此代码正确使用int main(void)
#include <stdio.h>
int main(void)
{
static int i=5;
if(--i)
{
printf("%d ",i);
main();
}
return 0
}