如何解决在 C++ 中禁止递归调用 main() 的原因
C++ 标准 says:
函数 main
不得在程序中使用。
Also:
允许递归调用,main
函数除外。
同时 C 允许根据此 answer 使用 main
。我在该答案下找到了一个 comment,内容如下:
全局构造函数的最简单实现(没有来自操作系统和底层 C 运行时入口代码的特殊支持)是让 C++ 编译器在 main 的开头生成一个函数调用(__main 是它的通用名称),它调用所有全局构造函数。每次递归调用 main 时都重建全局对象将是一件相当糟糕的事情...... :-)
这是有道理的,但我已经尝试了以下代码:
#include <cstdio>
struct S {
S() { std::puts("S ctor"); }
~S() { std::puts("S dtor"); }
};
S s;
int main() {
static int count = 0;
count++;
if (count <= 10) {
std::printf("%d ",count);
return main();
}
std::puts("");
}
在 clang、gcc、msvc 中。所有这些编译器都打印相同的输出:
S ctor
1 2 3 4 5 6 7 8 9 10
S dtor
因此,尽管递归调用了 s
,但全局 main
对象仅被构造一次。是的,我知道未定义/未指定/实现定义的行为是什么意思。但是有人会更详细地解释(或什至通过任何可用的 Internet 编译器的代码演示)为什么在 C++ 程序中使用 main
函数是被禁止的,特别是可能会导致意想不到的结果?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。