当我查看一些代码时,我发现以下内容。
void ph_library_init_register(struct ph_library_init_entry *ent);
#define PH_LIBRARY_INIT_PRI(initfn, finifn, pri) \
static __attribute__((constructor)) \
void ph_defs_gen_symbol(ph__lib__init__)(void) { \
static struct ph_library_init_entry ent = { \
__FILE__, __LINE__, pri, initfn, finifn, 0 \
}; \
ph_library_init_register(&ent); \
}
我的问题是: 1. stribute 是什么意思? 2.代码何时运行?
答案 0 :(得分:0)
__attribute__
与__declspec
形式的其他编译器类似,但可能更复杂(同样,GCC支持__declspec
兼容性)。
属性可以应用于函数,变量和类型。它们可以改变事物“行为”或“看起来像”的方式(例如对齐,可见性等)。
在您的特定情况下,__attribute__((constructor))
表示在main
执行之前自动调用该函数。在这种情况发生时没有指定,但您可以使用该属性分配优先级,以获得对构造函数的相对顺序的一些控制。
此功能的完整文档位于:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html。
(应该注意这是一个宏定义,所以除非你在其他地方扩展PH_LIBRARY_INIT_PRI
宏,否则代码实际上不会运行。)