【发布时间】:2012-03-13 18:11:36
【问题描述】:
如果在全局静态变量的初始化期间调用,我是否会导致函数失败?该函数使用另一个全局静态变量(来自不同的单元),因此在启动期间调用是不安全的。
我有两个原因。首先,如果我能以某种方式检测到这种情况,我可以打印一个有用的调试消息,而不是从它那里得到一个段错误和古怪的堆栈跟踪,否则会失败。其次,我可以防止它意外工作。有时库和目标文件正好对齐,依赖顺序也很好,因此您认为代码是正确的,但事实并非如此。
注意:这不是一个单独的程序,而是一个库函数,因此将一些全局变量标记为 main 的第一步可能不是一个可行的选择。更糟糕的是,在一种情况下,它实际上是一个模板函数,其中引用了一个 extern static。
注意:出于效率的原因,我希望避免将静态封装在函数调用中的明显解决方案。
GCC 欺骗是允许的,因为在我们的一个平台上检测到这一点就足够了。
【问题讨论】: