c++ - 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 次。根据标准文档,这不应该工作,但它可以工作。这是怎么回事?
解决方案
basic.start.main/3
:
该功能main
不得在程序中使用。
违反这条规则会使你的程序有未定义的行为——这意味着程序几乎可以做任何事情。它甚至可能做你想做的事,或者看起来做你想做的事,但有毁灭性的副作用,所以要避免在你的程序中出现未定义的行为。
关于缺少诊断消息:我怀疑某些编译器,例如 g++,实际上支持调用main
作为扩展。我必须打开-pedantic
或-pedantic-errors
获取诊断消息“ ISO C++ 禁止获取函数 '::main' [-Wpedantic] 的地址”
推荐阅读
- magento - “价格”属性值为空。设置属性,然后重试。在 Magento 2 中创建可配置产品时出错
- arrays - 如何在单个工作簿中跨多个工作表进行 COUNTUNIQUE
- java - 如何将 MouseListener 留在 ChildComponent 上但正确跟踪鼠标在父级上的进入和退出?
- c# - 在 C# 应用程序的访问表中按日期范围选择记录
- java - Java Binary InOrder Tree Traversal - 为什么在函数外部初始化 ArrayList 会有所不同?
- flutter - Flutter:滚动时的图像缩放动画
- javascript - 将 JSON 数组中的对象添加到 JavaScript 数组中,并重新映射键
- reactjs - 如何通过 React Context API 使用到达路由器?
- c# - 使用 U-Net 在场景之间传输数据
- jasperserver - 将 Jasperreports 服务器从 7.2 升级到 7.5 时出错(密钥库问题)