ein*_*ica 0 c++ idioms static-block
我有一个带有我的main()函数的翻译单元和另一个没有 main 的翻译单元。假设即使我只控制第二个而无法触摸第一个。
现在,由于我不会讨论的原因,我希望能够在运行之前运行一些代码main()。我知道这可以通过使用函数调用初始化全局变量来完成,但我想隐藏这一点 - 尽可能少地使用宏(我敢说不使用宏吗?可能不可能,C++ 中没有适当的静态块)
什么是优雅的,或者我们可以说,不是很丑的做这件事的方式?更清楚地说,我正在寻找可以多次使用此功能的东西,而不仅仅是让它工作一次的东西。我希望它尽可能接近:
// ... at global scope ...
static {
// my code here
}
Run Code Online (Sandbox Code Playgroud)
PS:这个问题与这个关于初始化静态类成员的问题有关,但不一样。它还希望清楚地反驳这个声明,它不能在 C++ 中完成。
注意:是的,我知道静态初始化顺序失败,不需要提醒我……而且我不是要求绕过它的东西。显然,静态运行代码需要一些谨慎。
请享受静态初始化顺序惨败:
int f(/* whatever args you want*/)
{
// code to be ran before main()
return 42;
}
static int _ignore = f(/*...*/);
Run Code Online (Sandbox Code Playgroud)
请注意,有时可能不会调用代码,如果不在其他任何地方使用(别名“优化”)。其中一种情况是当 TU 被编译成静态库时(然后未使用的变量和代码可能不会被拉入可执行文件)。(E. Maskovsky 的注释)。
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |