C++ 标准文档说程序不应调用主函数,但我调用了
The c++ standard documentation says a program shall not call the main function, but I did
它在c++标准文档中明确指出程序不能调用main。然而我写了一个调用 main 的程序并且工作得很好,这是为什么呢?代码:
#include<iostream>
static int counter = 0;
int main(){
counter++;
std::cout << counter << " It works" << std::endl;
while(counter < 10){
main();
}
return 1;
}
它打印控制台“It works”10 次。根据标准文档,这应该行不通,但它确实有效。怎么回事?
basic.start.main/3
:
函数 main
不得在程序中使用。
违反此规则会使您的程序具有 undefined behavior - 这意味着该程序几乎可以做任何事情。它甚至可能会做你想做的事,或者看起来会做你想做的事,但会产生毁灭性的副作用,因此请避免在你的程序中出现 未定义的行为。
关于缺少诊断消息:我怀疑某些编译器,如 g++,实际上支持调用 main
作为扩展。我必须打开 -pedantic
或 -pedantic-errors
才能获得诊断消息“ISO C++ 禁止获取函数‘::main’ [-Wpedantic] 的地址”。 =17=]
它在c++标准文档中明确指出程序不能调用main。然而我写了一个调用 main 的程序并且工作得很好,这是为什么呢?代码:
#include<iostream>
static int counter = 0;
int main(){
counter++;
std::cout << counter << " It works" << std::endl;
while(counter < 10){
main();
}
return 1;
}
它打印控制台“It works”10 次。根据标准文档,这应该行不通,但它确实有效。怎么回事?
basic.start.main/3
:
函数 main
不得在程序中使用。
违反此规则会使您的程序具有 undefined behavior - 这意味着该程序几乎可以做任何事情。它甚至可能会做你想做的事,或者看起来会做你想做的事,但会产生毁灭性的副作用,因此请避免在你的程序中出现 未定义的行为。
关于缺少诊断消息:我怀疑某些编译器,如 g++,实际上支持调用 main
作为扩展。我必须打开 -pedantic
或 -pedantic-errors
才能获得诊断消息“ISO C++ 禁止获取函数‘::main’ [-Wpedantic] 的地址”。 =17=]