__declspec
Microsoft 固有の仕様 →
ストレージ クラス情報を指定するための拡張属性構文は特定の型のインスタンスは次に示す Microsoft 固有のストレージ クラス属性に保存することを指定する __declspec のキーワードを使用します。他のストレージ クラス修飾子の例では static と extern のキーワードが含まれます。ただしこれらのキーワードはこのようなものが拡張属性構文で取り上げられていないためC および C++ 言語の ANSI 仕様の一部であり。拡張属性構文はC と C++ 言語に Microsoft 固有の拡張子を簡略化し標準化します。
文法
秘密区分の解除指定子 :
__declspec ( 秘密拡張区分を解除する修飾子 seq )秘密拡張区分を解除する修飾子 seq:
拡張された秘密区分の修飾子 opt拡張区分対応する秘密の修飾子 seq 拡張区分を解除する修飾子
拡張された秘密区分の修飾子 :
align(#)allocate("segname")
appdomain
deprecated
dllimport
dllexport
jitintrinsic
naked
noalias
noinline
noreturn
nothrow
novtable
process
property({get=get_func_name|,put=put_func_name})
restrict
safebuffers
selectany
thread
uuid("ComObjectGUID")
マージンとは宣言で修飾子のシーケンスを区切ります。例については後のセクションに表示されます。
拡張属性リファレンスには次の Microsoft 固有のストレージ クラス属性をサポートします : 配置します。割り当てます。AppDomain使用しないでくださいdllexportdllimportjitintrinsic生のnoaliasnoinlinenoreturnnothrownovtableプロセス制限します。safebuffersselectany と スレッド。またこれらの COM オブジェクト属性をサポートします : プロパティ と uuid。
適用されるかに dllexportdllimportnakednoaliasnothrowpropertyrestrictselectanythread と uuid のストレージ クラス属性はオブジェクトの宣言だけでプロパティまたは関数です。thread の属性はデータだけをオブジェクトに適用されます。naked の属性は関数だけに影響します。dllimport と dllexport の属性は関数とデータ オブジェクトに適用されます。propertyselectany と uuid の属性はCOM オブジェクトに適用されます。
__declspec のキーワードは簡単な宣言の先頭に配置する必要があります。コンパイラは宣言の変数識別子の後*をの前に 配置される警告__declspec のキーワードを使用しないと無視されます。
ユーザー定義型の宣言の先頭で指定された __declspec の属性はその型の変数に適用されます。次に例を示します。
__declspec(dllimport) class X {} varX;
この場合属性は varX に適用されます。class または struct キーワードの後ろに置かれた __declspec の属性はユーザー定義型に適用されます。次に例を示します。
class __declspec(dllimport) X {};
この場合属性は X に適用されます。
簡単な宣言に __declspec の属性を使用するための一般的なガイドラインは次のとおりです。:
decl-specifier-seq declarator-list;
秘密区分の解除 seq 指定子 は数値の場合よりも基本型を含める必要があります (たとえば。intfloattypedefまたはクラス名)ストレージ クラス (など)。staticextern)または __declspec の拡張子。init 宣言リスト は数値の場合よりも宣言の一部を含める必要があります。次に例を示します。
__declspec(selectany) int * pi1 = 0; //OK, selectany & int both part of decl-specifier
int __declspec(selectany) * pi2 = 0; //OK, selectany & int both part of decl-specifier
int * __declspec(selectany) pi3 = 0; //ERROR, selectany is not part of a declarator
次のコードは整数のスレッド ローカル変数を宣言し値の初期化 :
// Example of the __declspec keyword
__declspec( thread ) int tls_i = 1;