10.34 __attribute__((constructor[(priority)])) 関数属性

この属性を指定すると、関連付けられている関数が、main() に入る前に自動的に呼び出されます。

この属性は、ARM コンパイラでサポートされている GNU コンパイラの拡張機能です。

構文

__attribute__((constructor[( priority )]))
priority は、優先度を示す整数値(省略可)です。割り当てられている整数値が小さいコンストラクタから先に実行されます。優先度が割り当てられていないコンストラクタは、優先度が割り当てられているコンストラクタの後に実行されます。
100 以下の優先度値は内部使用専用に予約されています。これらの値を使用すると、コンパイラから警告が生成されます。100 を超える優先度値は予約されていません。

使用法

この属性は、起動コードまたは初期化コードに対して使用できます。例えば、DLL のロード時に呼び出す関数に使用します。
GNU のメイクファイルを変更せずにそのまま使用し、ARM コンパイラでビルドする場合は、リンカオプション --init=symbol よりもこの属性を使用することを推奨します。例えば、--translate_gcc--translate_gld--translate_g++ などを使用する場合が該当します。

以下の例では、main() が実行される前に、指定された順序でコンストラクタ関数が呼び出されます。
int my_constructor(void) __attribute__((constructor));
int my_constructor2(void) __attribute__((constructor(101)));
int my_constructor3(void) __attribute__((constructor(102)));
int my_constructor(void) /* This is the 3rd constructor */
{                        /* function to be called */
    ...
    return 0;
}
int my_constructor2(void) /* This is the 1st constructor */
{                         /* function to be called */
    ...
    return 0;
}
int my_constructor3(void) /* This is the 2nd constructor */
{                         /* function to be called */
    ...
    return 0;
}
関連する参考文書
8.181 --translate_g++
8.182 --translate_gcc
8.183 --translate_gld
関連情報
--init=symbol リンカオプション
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.