Microsoft 固有の仕様Microsoft Specific

ストレージ クラス情報の使用方法を指定するための拡張属性構文、 _ _declspecキーワードで、指定された型のインスタンスが以下に示す Microsoft 固有ストレージ クラス属性に保存することを指定します。The extended attribute syntax for specifying storage-class information uses the __declspec keyword, which specifies that an instance of a given type is to be stored with a Microsoft-specific storage-class attribute listed below. その他のストレージ クラス修飾子の例、staticexternキーワード。Examples of other storage-class modifiers include the static and extern keywords. ただし、これらのキーワードは C および C++ 言語の ANSI 仕様の一部であるため、拡張属性構文では扱われません。However, these keywords are part of the ANSI specification of the C and C++ languages, and as such are not covered by extended attribute syntax. 拡張属性構文は、Microsoft 固有の C および C++ 言語拡張を簡略化し、標準化します。The extended attribute syntax simplifies and standardizes Microsoft-specific extensions to the C and C++ languages.


     __declspec ( extended-decl-modifier-seq )    __declspec ( extended-decl-modifier-seq )

    extended-decl-modifieropt    extended-decl-modifieropt
    extended-decl-modifier extended-decl-modifier-seq    extended-decl-modifier extended-decl-modifier-seq

    align( # )    align( # )
    allocate(" segname ")    allocate(" segname ")
    allocator    allocator
    appdomain    appdomain
    code_seg(" segname ")    code_seg(" segname ")
    deprecated    deprecated
    dllimport    dllimport
    dllexport    dllexport
    jitintrinsic    jitintrinsic
    naked    naked
    noalias    noalias
    noinline    noinline
    noreturn    noreturn
    nothrow    nothrow
    novtable    novtable
    process    process
    property( { get= get_func_name | ,put= put_func_name } )    property( { get=get_func_name | ,put=put_func_name } )
    restrict    restrict
    safebuffers    safebuffers
    selectany    selectany
    spectre(nomitigation)    spectre(nomitigation)
    thread    thread
    uuid(" ComObjectGUID ")    uuid(" ComObjectGUID ")

空白は、宣言修飾子のシーケンスを区切ります。White space separates the declaration modifier sequence. その例は以降のセクションで示します。Examples appear in later sections.

文法の拡張属性は、これらの Microsoft 固有ストレージ クラス属性をサポートしています: align割り当てるアロケーターappdomaincode_seg非推奨とされますdllexportdllimportjitintrinsicnakednoaliasnoinlinenoreturnnothrownovtableプロセス制限safebuffersselectanyspectre、およびスレッドします。Extended attribute grammar supports these Microsoft-specific storage-class attributes: align, allocate, allocator, appdomain, code_seg, deprecated, dllexport, dllimport, jitintrinsic, naked, noalias, noinline, noreturn, nothrow, novtable, process, restrict, safebuffers, selectany, spectre, and thread. これらの COM オブジェクトの属性もサポートしています:プロパティuuidします。It also supports these COM-object attributes: property and uuid.

code_segdllexportdllimportnakednoaliasnothrowpropertyrestrictselectanythread、およびuuidストレージ クラス属性は、オブジェクトまたは関数を適用する対象の宣言のみのプロパティ。The code_seg, dllexport, dllimport, naked, noalias, nothrow, property, restrict, selectany, thread, and uuid storage-class attributes are properties only of the declaration of the object or function to which they are applied. thread属性は、データに影響し、オブジェクトのみです。The thread attribute affects data and objects only. nakedspectre属性は関数だけに影響します。The naked and spectre attributes affect functions only. dllimportdllexport属性は、関数、データ、およびオブジェクトに影響します。The dllimport and dllexport attributes affect functions, data, and objects. propertyselectany、およびuuid属性は COM オブジェクトに影響します。The property, selectany, and uuid attributes affect COM objects.

以前のバージョンとの互換性のため _declspecのシノニムです _ _declspecしない限り、コンパイラ オプション/Za(言語拡張機能を無効にする)は指定します。For compatibility with previous versions, _declspec is a synonym for __declspec unless compiler option /Za (Disable language extensions) is specified.

_ _Declspecキーワードは、単純な宣言の先頭に配置する必要があります。The __declspec keywords should be placed at the beginning of a simple declaration. 警告、なし、コンパイラは無視 _ _declspecキーワードの後に配置 * または (& a) と宣言で変数の識別子の前にします。The compiler ignores, without warning, any __declspec keywords placed after * or & and in front of the variable identifier in a declaration.

A _ _declspecその型の変数にユーザー定義型の宣言の先頭で指定された属性が適用されます。A __declspec attribute specified in the beginning of a user-defined type declaration applies to the variable of that type. 例えば:For example:

__declspec(dllimport) class X {} varX;

この場合、属性は varX に適用されます。In this case, the attribute applies to varX. A _ _declspec属性に配置した後、classまたはstructキーワードは、ユーザー定義型に適用されます。A __declspec attribute placed after the class or struct keyword applies to the user-defined type. 例えば:For example:

class __declspec(dllimport) X {};

この場合、属性は X に適用されます。In this case, the attribute applies to X.

使用するための一般的なガイドライン、 _ _declspec単純な宣言子の属性を次に示します。The general guideline for using the __declspec attribute for simple declarations is as follows:

decl-specifier-seq init-declarator-list;decl-specifier-seq init-declarator-list;

宣言-seq 指定子含める必要があります、特に、基本データ型 (例: intfloattypedef、またはクラス名)、ストレージ クラス (例:staticextern)、または _ _declspec拡張機能。The decl-specifier-seq should contain, among other things, a base type (e.g. int, float, a typedef, or a class name), a storage class (e.g. static, extern), or the __declspec extension. Init 宣言リスト含める必要があります、その際、ポインター宣言の一部です。The init-declarator-list should contain, among other things, the pointer part of declarations. 例:For example:

__declspec(selectany) int * pi1 = 0;   //Recommended, 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

次のコードでは、整数型のスレッド ローカル変数を宣言して特定の値に初期化します。The following code declares an integer thread local variable and initializes it with a value:

// Example of the __declspec keyword
__declspec( thread ) int tls_i = 1;

Microsoft 固有の仕様はここまでEND Microsoft Specific

関連項目See also

C 拡張ストレージ クラス属性C Extended Storage-Class Attributes