可能重复:
C++中main函数可以调用自身吗?
我决定使用 CodeBlock IDE 进行一个小测试,通过调用 main 函数,这应该是非法行为。
例如:
#include <iostream>
using namespace std;
int main()
{
cout<<"hello"<<endl;
main();
return 0;
}
奇怪的是,在代码块中我能够编译这个混乱的东西。有谁知道为什么吗?
输出:你好
正如您在问题本身中所说,语言规范禁止从代码中显式调用
main()
。只有运行时才能调用它。
当您使用 GCC 编译代码(阅读您的注释)时,
-pedantic
选项将以错误或警告的形式为您提供适当的诊断。所以试试这个:
g++ program.cpp -pedantic
cout<<"hello"<<endl;
**main();**
return 0;
第二行 main() 将导致无限递归循环,main() 函数一次又一次地调用自身,这反过来将导致代码返回值中没有路径。
由于并非所有路径都返回值,因此没有 C 编译器会编译它。忘记 C,即使 C# 编译器在发现所有路径都没有返回值时也会停止,尽管代码是清晰的。
可以调用main函数下的任意函数。main也是一个由编译器在运行时触发的函数。是的,这是非法行为,但您可以在 main 下调用 main 函数。在 main 下调用 main 函数会导致隐性并无限运行。在VS2008中,你会收到调用main函数的警告,但程序运行没有任何问题。