有没有一种便携式方法来判断 main() 是否已经开始?



在C++中,可以在输入main()之前在初始化时调用任意函数,包括调用尚未完全初始化的库,这可能会导致令人困惑的错误。 如果我正在编写一个库,是否可以在标准的现代C++(C++20 左右)中判断main()是否已启动,以便我可以阻止库的用户在安全之前使用它?

考虑的解决方案:

  • main()开始时调用library::init()函数。 该库在没有init()的情况下已经可以正常工作,因此添加一个只是为了改进错误报告似乎很愚蠢。 如果没有其他方法有效,显然这是最好的解决方案。
  • 使用静态初始值设定项来确定何时可以安全使用该库。 无法预测静态初始值设定项的运行顺序,因此这并不可靠。
  • 使用函数级静态变量来初始化库(本质上是延迟初始化),这样初始化顺序就无关紧要了。 我已经为某些事情这样做了,但这无法将保护扩展到在main()之前无法使用的其他库或系统资源。
  • 手动在堆栈上行走以查找main()的框架。 我认为不是。

回答我自己的问题:根据我根据人们的评论收集并查看

  • C/C++ 中有什么方法可以检测静态初始化期间代码是否正在运行?
  • 如何调用函数或静态初始化紧接在 main 之前的对象?

似乎没有办法在标准C++中获取此信息,标准解决方案只是为用户提供library::init()功能以调用main()

相关内容

最新更新