3

可能重复:
主函数可以在 C++ 中调用自身吗?

我决定使用 CodeBlock IDE 做一个小测试,调用 main 函数,这应该是非法行为。

前任:

#include <iostream>
using namespace std;

int main()
{
  cout<<"hello"<<endl;
  main();
  return 0;
}

奇怪的是,在代码块中,我能够编译这个烂摊子。有谁知道为什么?

输出:你好

4

3 回答 3

8

正如您在问题本身中所说main(),语言规范禁止从您的代码中显式调用。只有运行时可以调用它。

当您使用 GCC 编译代码(阅读您的评论)时,该-pedantic选项将以错误或警告的形式为您提供适当的诊断。所以试试这个:

g++ program.cpp -pedantic
于 2012-08-11T18:17:16.237 回答
1
cout<<"hello"<<endl;
**main();**
return 0;

第二行 main() 将导致一个无限递归循环,其中 main() 函数一次又一次地调用自身,这反过来又会导致代码返回值中没有路径。

由于并非所有路径都返回值,因此没有 C 编译器会编译它。忘记 C,即使 C# 编译器在发现所有路径都没有返回值时也会停止,尽管代码是清晰的。

于 2012-08-11T18:22:18.263 回答
0

您可以调用main函数下的任何函数。main也是编译器在运行时触发的函数。是的,这是非法行为,但您可以在 main 下调用 main 函数。在主因隐性下调用 main 函数并无限运行时间。在 VS2008 中,您会收到调用 main 函数的警告,但程序运行没有任何问题。

于 2012-08-11T18:12:57.007 回答