我一直在阅读一本详细介绍 C/C++ 构建过程的书,它提到有一个 GNU 扩展允许您指定要在 main() 启动之前运行的函数。
这种功能有哪些好的用例?与在 main() 启动时首先做的事情有什么区别?我更喜欢理论答案而不是任何具体代码。
对库初始化它们的全局状态很有用。没有它,应用程序必须从
main()
. 调用库的初始化函数
标准 C 运行时中的示例是
stdin
、stdout
和 stderr
的初始化。虽然这些是由 C 运行时本身初始化的,但您引用的功能允许用户编写的库进行类似的初始化。
C++ 可能使用它来调用全局变量的构造函数。
我用它来初始化静态存储变量,这些变量位于未被启动代码初始化的段中。
还有从主代码返回时调用的代码(用于清理操作)