__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-DeklassifizierungoptErweiterte-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;