Pau*_*han 4 c++ program-entry-point
可能重复:
在C++中递归到main()是否合法?
#include <iostream>
using namespace std;
int main() {
static int var = 5;
std::cout << --var;
if(var)
main();
}
Run Code Online (Sandbox Code Playgroud)
gcc编译代码http://ideone.com/lIp3A.我知道在C++中main不能在main中使用.为什么这段代码会编译?
Pra*_*rav 17
代码格式不正确,因为它违反了shall构造§3.6.1.3
§3.6.1.3说:
函数main不得在程序中使用.
阿可诊断规则被定义为(§1.4.1):
可诊断规则集包含本国际标准中的所有语法规则和语义规则,但那些包含"无需诊断"的明确表示法或被描述为导致"未定义行为"的规则除外.
§3.6.1.3定义可诊断的规则.
根据§1.4.2:
- 如果某个程序不违反本国际标准中的规则,则符合要求的实施应在其资源限制内接受并正确执行该程序.
- 如果程序包含违反任何可诊断规则的行为,则符合要求的实施方案应至少发出一条诊断消息,但不包括
- 如果某个程序包含违反不需要诊断的规则,则本国际标准不对该程序的实施提出任何要求.
编译器可以随心所欲地做任何事情.在Comeau Online(一个更符合标准的编译器)上尝试相同的代码.我收到这个错误
"function "main" may not be called or have its address taken"