#include <iostream>
using namespace std;
int main() {
static int var = 5;
std::cout << --var;
if(var)
main();
}
gcc编译代码http://ideone.com/lIp3A。我知道在C ++中main不能在main中使用。为什么这段代码会编译?
答案 0 :(得分:17)
代码格式错误,因为它违反了shall
的{{1}}构造
§3.6.1.3说:
函数main不得在程序中使用。
可诊断规则 定义为(§1.4.1):
可诊断规则集包含本国际标准中的所有语法和语义规则,但那些包含“无需诊断”的明确表示法或描述为“未定义行为”的规则除外。
§3.6.1.3
定义可诊断规则。
根据§1.4.2:
- 如果某个程序不违反本国际标准中的规则,则符合条件的实施应在其资源限制内接受并正确执行该程序。
- 如果某个程序包含违反任何可诊断规则的行为,则符合要求的实施应至少发出一条诊断消息,但
除外- 如果某个程序违反了不需要诊断的规则,则本国际标准不对该程序的实施提出任何要求。
编译器可以随心所欲地做任何事情。在Comeau Online上尝试相同的代码(更符合标准的编译器)。
我收到这个错误
§3.6.1.3