2
#include <iostream>

int main()
{
    main();
    std::cout<<"Hello World! "<<std::endl;
    return 0;
}

这是代码,它的行为如何?为什么?

4

5 回答 5

8

那是未定义的行为。您不能从 C++ 程序中调用 main()(标准的第 3.6.1.3 节)。

因此,任何事情都可能发生。并且没有必要问为什么。

于 2013-08-27T08:50:09.747 回答
3

main() 函数在 C++ 中调用自身,会发生什么?

任何事情都可能发生,因为它是未定义的行为。但由于程序目前处于静止状态,一些无限递归(最终导致堆栈溢出)似乎是合理的。

于 2013-08-27T08:50:05.447 回答
3

您不应该在 main 中调用 main,这是未定义的行为

§ 5.2.2.9 函数调用

允许递归调用,但名为 main (3.6.1) 的函数除外。

§ 3.6.1

函数 main 不得在程序中使用。main 的链接(3.5)是实现定义的。将 main 定义为已删除或将 main 声明为 inline、static 或 constexpr 的程序是错误的。名称 main 没有保留。[ 示例:成员函数、类和枚举可以称为 main,其他命名空间中的实体也可以。—结束示例]

于 2013-08-27T08:50:39.093 回答
1

main()在 C++ 中,不允许从您的调用。所以这是一个错误。即使取其地址也是错误的。

于 2013-08-27T08:49:26.833 回答
0

main()只有一个入口点。因此,不允许再次调用它。

于 2013-08-27T08:51:16.083 回答