使用 CodeBlocks 会忽略在 C++ 中调用主函数[重复]

问题描述 投票:0回答:3

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

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

例如:

#include <iostream>
using namespace std;

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

奇怪的是,在代码块中我能够编译这个混乱的东西。有谁知道为什么吗?

输出:你好

c++ codeblocks program-entry-point
3个回答
8
投票

正如您在问题本身中所说,语言规范禁止从代码中显式调用

main()
。只有运行时才能调用它。

当您使用 GCC 编译代码(阅读您的注释)时,

-pedantic
选项将以错误或警告的形式为您提供适当的诊断。所以试试这个:

g++ program.cpp -pedantic

1
投票
cout<<"hello"<<endl;
**main();**
return 0;

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.