在C++中,可以在输入main()
之前在初始化时调用任意函数,包括调用尚未完全初始化的库,这可能会导致令人困惑的错误。 如果我正在编写一个库,是否可以在标准的现代C++(C++20 左右)中判断main()
是否已启动,以便我可以阻止库的用户在安全之前使用它?
考虑的解决方案:
- 在
main()
开始时调用library::init()
函数。 该库在没有init()
的情况下已经可以正常工作,因此添加一个只是为了改进错误报告似乎很愚蠢。 如果没有其他方法有效,显然这是最好的解决方案。 - 使用静态初始值设定项来确定何时可以安全使用该库。 无法预测静态初始值设定项的运行顺序,因此这并不可靠。
- 使用函数级静态变量来初始化库(本质上是延迟初始化),这样初始化顺序就无关紧要了。 我已经为某些事情这样做了,但这无法将保护扩展到在
main()
之前无法使用的其他库或系统资源。 - 手动在堆栈上行走以查找
main()
的框架。 我认为不是。
回答我自己的问题:根据我根据人们的评论收集并查看
- C/C++ 中有什么方法可以检测静态初始化期间代码是否正在运行?
- 如何调用函数或静态初始化紧接在 main 之前的对象?
似乎没有办法在标准C++中获取此信息,标准解决方案只是为用户提供library::init()
功能以调用main()
。