我正在摆弄一些可能的方法来运行一些“这些东西需要在程序启动时初始化”代码,同时保持它们各自模块的本地,并提出了这个:
static struct init {
init() {
// do stuff
}
} _;
当我把它放在模块a.cc
中时,它工作正常。当我把它放在模块b.cc
中时也不那么好--A的版本被调用了两次而B的版本根本没有。我正在搞好,编译器错误,它对这两个具有相同名称的函数感到困惑,但令我惊讶的是,在进一步测试时,它在Microsoft C ++和GCC中的行为方式完全相同。这两个编译器是否碰巧有相同的错误,或者是否有关于语言语义的缺失?
此外,任何有关变通方法的建议或其他方法可以获得相同的结果(除了导出相关函数并明确地从main
调用它们,这显然是后备)?
答案 0 :(得分:2)
变量是静态的,因此仅在各自的翻译单元中可见,但类型不是。如何将结构放在匿名名称空间中?