__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-modifier
Rozhodnout
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
, , deprecated
code_seg
appdomain
, dllexport
, dllimport
empty_bases
naked
jitintrinsic
, noinline
noreturn
novtable
process
no_sanitize_address
safebuffers
restrict
noalias
nothrow
, , , selectany
, spectre
a .thread
Podporuje také tyto atributy objektu COM: property
a uuid
.
Atributy code_seg
, , dllexport
, , naked
noalias
property
nothrow
empty_bases
dllimport
restrict
selectany
no_sanitize_address
, thread
a 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í selectany
vliv na property
objekty 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
, , float
název typedef
nebo název třídy), třídu úložiště (například static
, ), extern
nebo 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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro