作为我正在编写的一些实用程序宏的一部分,我正在使用__attribute__((constructor))
定义嵌套函数
但是,我需要那些构造函数在全局空间定义的其他构造函数之前发生。
不幸的是,当我为嵌套构造函数指定优先级时,它们完全停止工作,而当我不指定嵌套优先级时,它们是最后一个被调用的...
以下是证明:
#include <stdio.h>
__attribute__((constructor(102))) void global_constructor_prio102(void) { printf("%s\n", __func__); }
__attribute__((constructor())) void global_constructor(void) { printf("%s\n", __func__); }
__attribute__((constructor(101))) void global_constructor_prio101(void) { printf("%s\n", __func__); }
int main(int argc, char **argv)
{
printf("%s - gcc %s\n", __func__, __VERSION__);
__attribute__((constructor(102))) void nested_constructor_prio102(void) { printf("%s\n", __func__); }
__attribute__((constructor())) void nested_constructor(void) { printf("%s\n", __func__); }
__attribute__((constructor(101))) void nested_constructor_prio101(void) { printf("%s\n", __func__); }
return 0;
}
及其输出:
global_constructor_prio101
global_constructor_prio102
global_constructor
nested_constructor
main - gcc 8.1.0
我是否遇到了GCC中的错误或某些晦涩的行为? 有没有办法让嵌套构造函数在全局构造函数之前运行?
(替换链接:https://repl.it/@agustinf_/Nested-constructors-fail-with-priority)