C++ 标准文档说程序不应调用 main 函数,但我做到了

Loo*_*God 2 c++ recursion program-entry-point

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;
}
Run Code Online (Sandbox Code Playgroud)

它打印到控制台“It Works” 10 次。根据标准文档,这不应该起作用,但它确实有效。这是怎么回事?

Ted*_*gmo 5

basic.start.main/3该函数main不得在程序中使用。

违反此规则会使您的程序出现未定义的行为- 这意味着该程序几乎可以做任何事情。它甚至可能会执行您希望它执行的操作,或者看起来执行您想要执行的操作,但会产生毁灭性的副作用,因此请避免在程序中出现未定义的行为。

关于缺乏诊断消息:我怀疑某些编译器(例如 g++)实际上支持main作为扩展调用。我必须打开-pedantic-pedantic-errors获取诊断消息“ ISO C++ 禁止获取函数 '::main' [-Wpedantic] 的地址