Oracle® Developer Studio 12.5: C ユーザーズガイド

印刷ビューの終了

更新: 2016 年 7 月
 
 

2.10 サポートされる属性

コンパイラには、互換性を保つために次の属性 (__attribute__ ((keyword)) ) が実装されています。属性キーワードを二重下線で囲む記法 __keyword__ も受け入れられます。

alias

名前を、宣言された関数または変数名の別名にします

aligned

#pragma align とほぼ同等です。警告を生成し、可変長配列について使用される場合は無視されます。

always_inline

#pragma inline および -xinline と同義です

cleanup (クリーンアップ関数)

関連付けられた変数がスコープ外に出た (その変数が宣言されているブロックから出た) ときに、属性で指定されている関数が実行されるようにします。これは自動関数スコープ (ローカル) 変数にのみ適用でき、静的ストレージ存続期間を持つパラメータや変数には適用できません。この関数は、その変数と互換性のある型へのポインタである 1 つのパラメータを受け取る必要があります。この関数の戻り値 (存在する場合) は無視されます。クリーンアップ関数が正常に復帰しなかった場合の動作は未定義です。

const

#pragma no_side_effect と同等です

constructor

コンストラクタが 1 回しか呼び出されない点を除き、#pragma init と同等です。

deprecated(msg)

変数または関数がソースファイルの任意の場所で使用される場合は警告になります。オプションの引数 msg は文字列でなければならず、警告メッセージが発行された場合はそのメッセージに含まれます。

destructor

#pragma fini と同等です

malloc

#pragma returns_new_memory と同等です

noinline

#pragma no_inline および -xinline と同義です

noreturn

#pragma does_not_return と同義です

pure

#pragma does_not_write_global_data と同等です

packed

#pragma pack() と同等です

returns_twice

#pragma unknown_control_flow と同等です

tls_model

スレッドローカルなストレージモデルを設定します。tls_model 引数は、global-dynamiclocal-dynamicinitial-execlocal-exec のいずれかにする必要があります。

vector_size

変数または (typedef を使用して作成された) 型の名前がベクトルを表していることを示します。

visibility

リンカースコープ指定子で説明されているように、リンカースコープを提供します。構文: __attribute__((visibility(“ visibility-type”)))。ここで、visibility-type は次のいずれかです。

default

__global リンカースコープと同じです

hidden

__hidden リンカースコープと同じです

internal

__symbolic リンカースコープと同じです

weak

#pragma weak と同等です

2.10.1 __has_attribute 関数形式のマクロ

事前定義された関数形式のマクロ

__has_attribute(attr)

attr がサポートされる属性の場合、1 に評価されます。それ以外の場合は 0 に評価されます。使用例:

#ifndef __has_attribute // if we don't have __has_attribute, ignore it
    #define __has_attribute(x) 0
#endif
#if __has_attribute(deprecated)
   #define DEPRECATED __attribute__((deprecated))
#else
   #define DEPRECATED // attribute "deprecated" not available
#endif
void DEPRECATED old_func(int); // use the attribute if available