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. 分配とはどういう意味ですか? 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 に答える