Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.11.12 init

#pragma init (f1[, f2…,fn])

main() を呼び出す前に、f 1 から f n までの関数 (初期化関数) を呼び出します。そのような関数では、型が void で、かつ引数を一切受け入れないことが期待されます。これらは、プログラムの実行開始時にそのメモリーイメージを構築している間に呼び出されます。共有オブジェクトの初期設定子は、共有オブジェクトをメモリーに入れる操作中、つまりプログラムの起動時または dlopen() などの一部の動的ロード時のいずれかに実行されます。初期化関数の呼び出しを順序付ける方法は、それがリンクエディタによって動的または静的に処理される順序に依存します。

初期化関数が大域プログラム状態に影響を与えるときは特に注意してください。たとえばシステムライブラリを終了関数として使用したときに何が発生するかがインタフェースに明示的に規定されていないかぎり、システムライブラリ初期化関数によって変更される可能性がある errno の値などの大域状態情報をすべて取得し、復元するようにしてください

このような関数は #pragma init 指令の中に登場するたびに、1 回呼び出されます。