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

时间:2013-08-27 08:46:20

标签: c++ main

#include <iostream>

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

这是代码,它的表现如何?为什么呢?

5 个答案:

答案 0 :(得分:7)

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

因此,任何事情都可能发生。问问为什么没有意义。

答案 1 :(得分:3)

  

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

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

答案 2 :(得分:3)

你不应该调用main inside main,它是未定义的行为

§5.2.2.9函数调用

  

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

§3.6.1

  

函数main不得在程序中使用。 main的链接(3.5)是实现定义的。将main定义为已删除或将main声明为inline,static或constexpr的程序不正确。名称main不以其他方式保留。 [示例:成员函数,类和枚举可以称为main,其他名称空间中的实体也可以称为main。 - 例子]

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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