__declspec

Specyficzne dla firmy MicrosoftMicrosoft Specific

Składnia atrybutu rozszerzonego określająca informacje klasy magazynu używa __declspec słowa kluczowego, które określa, że wystąpienie danego typu ma być przechowywane z atrybutem klasy magazynowania specyficznym dla firmy Microsoft wymienionym poniżej.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. Przykłady innych modyfikatorów klasy magazynu obejmują static extern słowa kluczowe i.Examples of other storage-class modifiers include the static and extern keywords. Jednak te słowa kluczowe są częścią specyfikacji ANSI w językach C i C++ i jako takie nie są objęte składnią atrybutów rozszerzonych.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. Składnia atrybutu rozszerzonego upraszcza i standaryzuje rozszerzenia języków C i C++ specyficzne dla Microsoft.The extended attribute syntax simplifies and standardizes Microsoft-specific extensions to the C and C++ languages.

GramatykaGrammar

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

extended-decl-modifier-seq:extended-decl-modifier-seq:
extended-decl-modifieruszlachetnianiaextended-decl-modifieropt
extended-decl-modifier extended-decl-modifier-seqextended-decl-modifier extended-decl-modifier-seq

extended-decl-modifier:extended-decl-modifier:
align(Liczba)align( number )
allocate("segname")allocate(" segname ")
allocator
appdomain
code_seg("segname")code_seg(" segname ")
deprecated
dllimport
dllexport
jitintrinsic
naked
noalias
noinline
noreturn
nothrow
novtable
no_sanitize_address
process
property({ get= Get-Func-Name | ,put= Put-Func-Name })property( { get=get-func-name | ,put=put-func-name } )
restrict
safebuffers
selectany
spectre(nomitigation)
thread
uuid("ComObjectGUID")uuid(" ComObjectGUID ")

Spacja oddziela sekwencje modyfikatora deklaracji.White space separates the declaration modifier sequence. Przykłady są zamieszczone w kolejnych sekcjach.Examples appear in later sections.

Rozszerzony Gramatyka atrybutów obsługuje te atrybuty klasy magazynu specyficznych dla firmy Microsoft:,,,,,,,,, align allocate allocator appdomain code_seg deprecated dllexport dllimport jitintrinsic naked , noalias ,,,,,,,,,, noinline noreturn nothrow novtable no_sanitize_address process restrict safebuffers selectany spectre , i thread .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, no_sanitize_address,process, restrict, safebuffers, selectany, spectre, and thread. Obsługuje również te atrybuty obiektu COM: property i uuid .It also supports these COM-object attributes: property and uuid.

Atrybuty klasy,,,,,,,,,, code_seg dllexport dllimport naked noalias nothrow no_sanitize_address property restrict selectany thread i uuid są właściwości tylko deklaracji obiektu lub funkcji, do których są stosowane.The code_seg, dllexport, dllimport, naked, noalias, nothrow, no_sanitize_address, 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. Ten thread atrybut ma wpływ tylko na dane i obiekty.The thread attribute affects data and objects only. naked Atrybuty i spectre mają wpływ tylko na funkcje.The naked and spectre attributes affect functions only. dllimport Atrybuty i dllexport mają wpływ na funkcje, dane i obiekty.The dllimport and dllexport attributes affect functions, data, and objects. property Atrybuty, selectany i uuid mają wpływ na obiekty com.The property, selectany, and uuid attributes affect COM objects.

W celu zapewnienia zgodności z poprzednimi wersjami, _declspec jest synonimem, __declspec Jeśli opcja kompilatora /za ( wyłączone rozszerzenia językowe nie została określona.For compatibility with previous versions, _declspec is a synonym for __declspec unless compiler option /Za (Disable language extensions) is specified.

__declspec Słowa kluczowe należy umieścić na początku prostej deklaracji.The __declspec keywords should be placed at the beginning of a simple declaration. Kompilator ignoruje, bez ostrzeżenia, wszystkie __declspec słowa kluczowe umieszczone po * lub & i przed identyfikatorem zmiennej w deklaracji.The compiler ignores, without warning, any __declspec keywords placed after * or & and in front of the variable identifier in a declaration.

__declspec Atrybut określony na początku deklaracji typu zdefiniowanego przez użytkownika ma zastosowanie do zmiennej tego typu.A __declspec attribute specified in the beginning of a user-defined type declaration applies to the variable of that type. Na przykład:For example:

__declspec(dllimport) class X {} varX;

W takim przypadku atrybut ma zastosowanie do varX .In this case, the attribute applies to varX. __declspec Atrybut umieszczony po class struct słowie kluczowym or ma zastosowanie do typu zdefiniowanego przez użytkownika.A __declspec attribute placed after the class or struct keyword applies to the user-defined type. Na przykład:For example:

class __declspec(dllimport) X {};

W takim przypadku atrybut ma zastosowanie do X .In this case, the attribute applies to X.

Ogólne wytyczne dotyczące korzystania z __declspec atrybutu dla prostych deklaracji są następujące:The general guideline for using the __declspec attribute for simple declarations is as follows:

decl-specyfikator-SEQ init-deklarator-list;decl-specifier-seq init-declarator-list;

Element decl-specyfikator-SEQ powinien zawierać, między innymi, typ podstawowy (np.,, int float typedef lub nazwę klasy), klasę magazynu (np. static extern ) lub __declspec rozszerzenie.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. Element init-deklarator-list powinien zawierać, między innymi, część wskaźnika deklaracji.The init-declarator-list should contain, among other things, the pointer part of declarations. Na przykład: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

Poniższy kod deklaruje zmienną całkowitoliczbową wątku lokalnego i inicjuje ją z wartością: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;

ZAKOŃCZENIE określonych przez firmę MicrosoftEND Microsoft Specific

Zobacz teżSee also

SłużącKeywords
Rozszerzone atrybuty Storage-Class języka CC Extended Storage-Class Attributes