为什么下面的代码根本没有终止?
int main()
{
printf("Hello world\n");
main("hello",32);
return 0;
}
答案 0 :(得分:8)
对main()
函数进行递归调用(代码中的第4行),这会导致无限递归。
答案 1 :(得分:1)
您的代码永远不会到达return 0;
语句...因为main
函数会在此之前调用自己。第二次代码运行时,它会再次调用自身,然后再次运行main
时,它会在到达return语句之前调用自身...
这将永远持续下去。
答案 2 :(得分:0)
上面的代码给出了编译错误。正确的代码可能是 -
int main()
{
printf("Hello world");
main();
return 0;
}
它进入无限循环,因为'main'递归调用自身并且没有终止条件。
答案 3 :(得分:0)
代码将生成编译错误"调用main"的额外参数 如果在main中没有任何参数运行那么它将是对main函数的递归调用,这就是为什么它不是终止的。
答案 4 :(得分:0)
好的,这里有两件事:
标准说只有两种方法可以写main
:
int main(void) {}
和int main(int argc, char* argv[]) {}
。你没有遵循,这使得
您的main
函数接受未指定的个参数。因此,不期望您的main
函数不接受任何arg。
作为第二点的结果,即使这样也会编译并运行:
int main()
{
printf("Hello world\n");
main("hellow",32, "cow", 3.14);
return 0;
}
编写int main(void)
并查看编译器对递归调用的看法。
HTH。