関数属性 (IBM 拡張)

関数の属性は、GNU C で開発されたプログラムの移植性を高めるためにイン プリメントされた拡張機能です。関数に属性を指定することは、コンパイラーが 関数呼び出しを最適化するのを支援し、コードをより多面的に検査するようにコンパイラーに指示 する明示的な方法です。追加機能を提供する属性もあります。

関数属性は、キーワード __attribute__、その後に続く属性名、さらに、その属性 名が必要とする追加引数によって指定されます。関数の __attribute__ 指定は、関数の宣言ま たは定義に含まれます。構文の形式は次のとおりです。

構文図を読む構文図をスキップする
関数属性の構文: 関数定義 (形式 1)

>>-return_type--__attribute__----------------------------------->

       .-,--------------------------.       
       V                            |       
>--((----+-attribute name---------+-+--))----------------------->
         '-__--attribute_name--__-'         

>--function_declarator-----------------------------------------><

構文図を読む構文図をスキップする
関数属性の構文: 関数定義 (形式 2)

>>-__attribute__------------------------------------------------>

       .-,--------------------------.                                            
       V                            |                                            
>--((----+-attribute_name---------+-+--))--return_type--function_declarator--;-><
         '-__--attribute_name--__-'                                              

attribute_name は、前後に 2 つの下線文字を付けても付けなくても指定できます。 ただし、2 つの下線文字を使用すると、同じ名前のマクロと名前が競合する可能性が低くなります。 これらの言語機能は、拡張言語レベルの 1 つでコンパイルされるとき、一 括で使用可能になります。

以下の関数宣言はすべて有効です。
int __attribute__((attribute_name)) func(int i);   //Form 1
__attribute__((attribute_name)) int func(int);     //Form 2
int func() __attribute__((attribute_name));        //Form 3
C++ のみの始まり 属性指定は、関数に存在する場合がある例外宣言に従う必要があります。 次に例を示します。
int func(int) throw(int) __attribute__((pure));
C++ のみの終わり

次の関数属性がサポートされています。