gcc扩展名__attribute__含义

时间:2013-11-04 06:56:30

标签: gcc

当我查看一些代码时,我发现以下内容。

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.代码何时运行?

1 个答案:

答案 0 :(得分:0)

GCC中的

__attribute____declspec形式的其他编译器类似,但可能更复杂(同样,GCC支持__declspec兼容性)。

属性可以应用于函数,变量和类型。它们可以改变事物“行为”或“看起来像”的方式(例如对齐,可见性等)。

在您的特定情况下,__attribute__((constructor))表示在main执行之前自动调用该函数。在这种情况发生时没有指定,但您可以使用该属性分配优先级,以获得对构造函数的相对顺序的一些控制。

此功能的完整文档位于:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

(应该注意这是一个宏定义,所以除非你在其他地方扩展PH_LIBRARY_INIT_PRI宏,否则代码实际上不会运行。)