如何在__attribute __((constructor))中为嵌套函数指定优先级?

时间:2018-08-07 23:00:27

标签: c gcc constructor attributes initialization

作为我正在编写的一些实用程序宏的一部分,我正在使用__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

0 个答案:

没有答案