__declspec

Specifické pro Microsoft

Rozšířená syntaxe atributu pro určení informací třídy úložiště používá __declspec klíčové slovo, které určuje, že instance daného typu má být uložena s atributem třídy úložiště specifické pro Microsoft uvedený níže. Mezi příklady dalších modifikátorů třídy úložiště patří static klíčová slova a extern klíčová slova. Tato klíčová slova jsou však součástí specifikace ANSI jazyků C a C++ a jako takové nejsou pokryty rozšířenou syntaxí atributů. Syntaxe rozšířeného atributu zjednodušuje a standardizuje rozšíření specifické pro společnost Microsoft v rámci jazyků C a C++.

Gramatika

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

extended-decl-modifier-seq:
extended-decl-modifierRozhodnout
extended-decl-modifier extended-decl-modifier-seq

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

Mezera odděluje sekvenci modifikátoru deklarace. Příklady se zobrazí v pozdějších oddílech.

Rozšířená gramatika atributů podporuje tyto atributy třídy úložiště specifické pro Microsoft: align, allocate, , allocator, , deprecatedcode_segappdomain, dllexport, dllimportempty_basesnakedjitintrinsic, noinlinenoreturnnovtableprocessno_sanitize_addresssafebuffersrestrictnoaliasnothrow, , , selectany, spectrea .thread Podporuje také tyto atributy objektu COM: property a uuid.

Atributy code_seg, , dllexport, , nakednoaliaspropertynothrowempty_basesdllimportrestrictselectanyno_sanitize_address, threada uuid třídy úložiště jsou vlastnosti pouze deklarace objektu nebo funkce, na kterou jsou použity. Atribut thread má vliv pouze na data a objekty. Pouze naked funkce a spectre atributy mají vliv. dllexport Atributy dllimport ovlivňují funkce, data a objekty. Objekty COM mají selectanyvliv na propertyobjekty COM , a uuid atributy.

Kvůli kompatibilitě s předchozími verzemi _declspec je synonymem, pokud __declspec není zadána možnost /Za kompilátoru (Zakázat jazyková rozšíření ).

Klíčová __declspec slova by měla být umístěna na začátku jednoduché deklarace. Kompilátor ignoruje bez upozornění všechna __declspec klíčová slova umístěná za * nebo & před identifikátor proměnné v deklaraci.

Atribut __declspec zadaný na začátku deklarace typu definované uživatelem se vztahuje na proměnnou tohoto typu. Příklad:

__declspec(dllimport) class X {} varX;

V tomto případě se atribut vztahuje na varX. Atribut __declspec umístěný za atributem class nebo struct klíčovým slovem se vztahuje na uživatelem definovaný typ. Příklad:

class __declspec(dllimport) X {};

V tomto případě se atribut vztahuje na X.

Obecné pokyny pro použití atributu __declspec pro jednoduché deklarace jsou následující:

decl-specifier-seq init-declarator-list ;

Mimo decl-specifier-seq jiné by měl obsahovat základní typ (například int, , floatnázev typedefnebo název třídy), třídu úložiště (například static, ), externnebo příponu __declspec . Mimo init-declarator-list jiné by měla obsahovat část deklarací ukazatele. Příklad:

__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

Následující kód deklaruje místní proměnnou vlákna integer a inicializuje ji hodnotou:

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

END Microsoft Specific

Viz také

Klíčová slova
C – rozšířené atributy třídy úložiště