首页 > 解决方案 > c++ 标准文档说程序不应调用主函数,但我做到了

问题描述

它在 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;
}

它打印到控制台“它有效”10 次。根据标准文档,这不应该工作,但它可以工作。这是怎么回事?

标签: c++recursionmain

解决方案


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

违反这条规则会使你的程序有未定义的行为——这意味着程序几乎可以做任何事情。它甚至可能做你想做的事,或者看起来做你想做的事,但有毁灭性的副作用,所以要避免在你的程序中出现未定义的行为。

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


推荐阅读