Sdílet prostřednictvím


__declspec

Specifické pro Microsoft

Syntaxe rozšířeného atributu pro určení informací o třídě úložiště používá klíčové slovo __declspec, které určuje, že se instance daného typu uloží v rámci níže uvedeného atributu třídy úložiště specifické pro společnost Microsoft.Příklady dalších modifikátorů na úrovni úložiště zahrnují klíčová slova static a extern.Tato klíčová slova jsou však součástí specifikace ANSI jazyků C a C++ a jako taková nejsou zahrnuta v syntaxi doplňkového atributu.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-modifieropt

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

  • extended-decl-modifier:
    align(#)

    allocate("segname")

    appdomain

    code_seg("segname")

    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")

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 společnost Microsoft: align, allocate, appdomain, code_seg, deprecated, dllexport, dllimport, jitintrinsic, naked, noalias, noinline, noreturn, nothrow, novtable, process, restrict, safebuffers, selectany a thread.Také podporuje tyto atributy objektu COM: property a uuid.

Atributy třídy úložiště code_seg, dllexport, dllimport, naked, noalias, nothrow, property, restrict, selectany, thread a uuid jsou vlastnosti pouze prohlášení objektu nebo funkce, u kterých jsou použity.Atribut thread má vliv pouze na data a objekty.Atribut naked ovlivňuje pouze funkce.Atributy dllimport a dllexport mají vliv na funkce, data a objekty.Objekty COM ovlivňují atributy property, selectany a uuid.

Klíčová slova __declspec je třeba umístit na začátek jednoduchého prohlášení.Kompilátor ignoruje bez varování všechna klíčová slova __declspec zadaná po * nebo & a před identifikátorem proměnné v prohlášení.

Atribut __declspec určený na začátku deklarace uživatelského typu platí pro proměnnou daného typu.Příklad:

__declspec(dllimport) class X {} varX;

V tomto případě platí atribut pro varX.Atribut __declspec umístěný za klíčovým slovem class nebo struct platí pro uživatelský typ.Příklad:

class __declspec(dllimport) X {};

V tomto případě platí atribut pro X.

Obecný návod pro použití atributu __declspec pro jednoduché deklarace je následující:

decl-specifier-seq declarator-list;

decl-specifier-seq by měl obsahovat mimo jiné i základní typ (napříkladint, float, typedef nebo název třídy), třída úložiště (např.static, extern), nebo výraz __declspec.init-declarator-list by měl obsahovat mimo jiné část deklarace s ukazatelem.Příklad:

__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

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;

Viz také

Referenční dokumentace

Klíčová slova jazyka C++

Rozšířené atributy třídy úložiště jazyka C