0

当我查看一些代码时,我发现以下快照。

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. 代码什么时候运行?

4

1 回答 1

0

__attribute__在 GCC 中类似于其他编译器的形式__declspec,尽管可能更复杂一些(此外,GCC 支持__declspec兼容性)。

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

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

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

(应该注意,这是一个宏定义,因此除非您在其他地方也展开宏,否则代码实际上不会运行。)PH_LIBRARY_INIT_PRI

于 2013-11-04T11:43:15.387 回答