C++ 全局函数

标签 c++

我在 .cpp 文件 void functionA() 中声明了一个全局函数。我希望 functionA() 在启动前被调用一次(不在 main() 内)。我意识到,如果函数是 int functionB(),我可以使用 static int A = functionB() 调用它。但是对于void的返回值,我该怎么做呢?

谢谢

最佳答案

你把它放到一个全局对象的构造函数中:

void functionA();

namespace {
  struct global_initializer {
    global_initializer() {functionA();}
  } the_global_initializer;
}

请注意,这具有全局初始化的共同缺点:虽然同一翻译单元中的全局变量按照其定义顺序进行初始化,但跨翻译单元的全局变量初始化顺序是未定义的。

此外,链接器可能会选择消除未引用的对象 (the_global_initializer),这将阻止调用 functionA()

关于C++ 全局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3665308/

相关文章:

c++ - Qt Creator 错误 : cannot find -lopencv_imgcodecs

C++11 运算符""带双参数

c++ - 如何使用具有可警报 true 和总体最短 sleep 时间的 SleepEx?

c++ - VS2013中构造函数调用自身时会发生什么?

c++ - 函数声明末尾的 "const"是什么意思?

c++如何检查数组中的-1.#IND

c++ - 使用构造函数将双链表中的指针初始化为 NULL

c++ - std::merge 使用 2 个 mmaped 数组?

c++ - 被删除的构造函数 "accessible"吗?

c++ - 在 constexpr 中使用 argc,是否严格要求所涉及的任何子表达式都是常量表达式?