Freigeben über


__declspec

Microsoft-spezifisch

Die Syntax des erweiterten - Attribut zum Angeben von Informationen verwendet das __declspec Speicherklassen Schlüsselwort, das angibt, dass eine Instanz eines angegebenen Typs mit einem Microsoft-spezifische Speicherklassenattribut gespeichert werden soll, das im Folgenden aufgeführt wird.modifizierer Speicherklassen anderer Beispiele umfassen die static und extern Schlüsselwörter.Allerdings sind diese Schlüsselwörter Teil der ANSI-Spezifikation der Programmiersprachen C und C++ und da so nicht durch Syntax des erweiterten Attributs erläutert werden.Die Syntax des erweiterten Attributs vereinfacht und standardisiert Microsoft-spezifischen Erweiterungen zu den Programmiersprachen C und C++.

Grammatik

  • Bezeichner Deklassifizierung:
    __declspec (erweiterte-Deklassifizierung-Modifizierer-folgend )

  • erweiterte-Deklassifizierung-Modifizierer-folgend:
    Modifizierer Erweiterte-Deklassifizierungopt

    Erweiterte-DeklassifizierungModifizierer erweiterte-Deklassifizierung-Modifizierer-folgend

  • Modifizierer Erweiterte-Deklassifizierung:
    align(#)

    allocate("segname")

    appdomain

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

Leerzeichen trennen die Deklarationen modifizierer Sequenz.Beispiele werden in späteren Abschnitten.

Grammatik des erweiterten Attributs Speicherklassen Microsoft-spezifische unterstützt diese Attribute: align, Zuordnen zu, appdomain, veraltet, dllexport, dllimport, jitintrinsic, nackt, noalias, noinline, noreturn, nothrow, novtable, Prozess, Beschränken Sie ein, safebuffers, selectanyund Thread.Es unterstützt auch diese Objekt-Attribute: Eigenschaft und uuid.

dllexport, dllimport, naked, noalias, nothrow, property, restrict, selectany, und threadSpeicherklassen uuid-Attribute sind Eigenschaften nur der Deklaration des Objekts oder Funktion, für welchen sie angewendet werden.Das thread-Attribut wirkt sich nur auf Daten und Objekte.Das naked-Attribut wirkt sich nur auf Funktionen.Die dllimport-Attribute beeinflussen, Funktionen und dllexport Daten und Objekte.property, selectanyund uuid COM-Objekte Attribute beeinflussen.

Die __declspec Schlüsselwörter sollten am Anfang einer einfachen Deklaration platziert werden.Der Compiler ignoriert, ohne dass eine Warnung, __declspec * oder & nach Schlüsselwörtern eingefügt und vor dem variablen Bezeichner in einer Deklaration.

Ein __declspec-Attribut, das am Anfang einer benutzerdefinierten Typdeklaration angegeben wird, gilt für die Variable dieses Typs zu.Beispiele:

__declspec(dllimport) class X {} varX;

In diesem Fall wird das Attribut auf varX.Ein __declspec-Attribut eingefügt, nachdem das class oder struct-Schlüsselwort für den benutzerdefinierten Typ angewendet wird.Beispiele:

class __declspec(dllimport) X {};

In diesem Fall wird das Attribut auf X.

Die allgemeine Richtlinie für die Verwendung des Attributs __declspec für einfache Deklarationen lautet wie folgt:

decl-specifier-seq declarator-list;

Deklassifizierung-Spezifizierer-folgend soll u. a. einen Basistyp enthalten (z. B.int, float, typedefoder ein Klassenname), (z. B. einer Speicherklassestatic, extern) oder die __declspec Erweiterung.INIT-DeklaratorListe sollte unter anderem den Zeiger Teil von Deklarationen enthalten.Beispiele:

__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

Der folgende Code einen ganzzahligen Thread lokale Variable deklariert und initialisiert diesen mit einem Wert:

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

Siehe auch

Referenz

C++-Schlüsselwörter

C Speicherklassen-Attribute erweiterte