C++全局函数

Ste*_*eng 2 c++

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

谢谢

sbi*_*sbi 5

您将它放入全局对象的构造函数中:

void functionA();

namespace {
  struct global_initializer {
    global_initializer() {functionA();}
  } the_global_initializer;
}
Run Code Online (Sandbox Code Playgroud)

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

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