__declspec

Microsoft-spezifisch

Die erweiterte Attributsyntax zum Angeben von Speicherklasseninformationen verwendet die __declspec Schlüsselwort (keyword), die angibt, dass eine Instanz eines bestimmten Typs mit einem microsoft-spezifischen Speicherklassen-Attribut gespeichert werden soll. Andere Speicherklassenmodifizierer sind beispielsweise die Schlüsselwörter static und extern . Diese Schlüsselwort (keyword) sind jedoch Teil der ANSI-Spezifikation der C- und C++-Sprachen und werden daher nicht durch erweiterte Attributsyntax abgedeckt. Die erweiterte Attributsyntax vereinfacht und standardisiert Microsoft-spezifische Erweiterungen der Programmiersprachen C und C++.

Grammatik

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

Die Deklarationsmodifizierersequenz ist durch Leerzeichen getrennt. Beispiele finden Sie in späteren Abschnitten.

Erweiterte Attributgrammatik unterstützt diese microsoftspezifischen Speicherklassenattribute: align, , allocate, , appdomainallocator, code_seg, , dllimportrestrictjitintrinsicempty_basesnakeddllexportnoaliasdeprecatednoinlinenoreturnsafebuffersprocessselectanynovtableno_sanitize_addressnothrowund . spectrethread Außerdem werden diese COM-Objektattribute unterstützt: property und uuid.

Die code_segAttribute , dllexport, empty_basesnakednothrowno_sanitize_addressnoaliasdllimportrestrictselectanypropertythreadund uuid Speicherklassen sind nur Eigenschaften der Deklaration des Objekts oder der Funktion, auf die sie angewendet werden. Das thread Attribut wirkt sich nur auf Daten und Objekte aus. Die naked Attribute spectre wirken sich nur auf Funktionen aus. Die dllimport Attribute dllexport wirken sich auf Funktionen, Daten und Objekte aus. Die property, selectanyund uuid Attribute wirken sich auf COM-Objekte aus.

Aus Gründen der Kompatibilität mit früheren Versionen _declspec ist ein Synonym für __declspec die Angabe der Compileroption /Za (Sprachenerweiterungen deaktivieren).

Die __declspec Schlüsselwort (keyword) sollten am Anfang einer einfachen Deklaration platziert werden. Der Compiler ignoriert ohne Warnung alle __declspec Schlüsselwort (keyword), die hinter * oder & und vor dem Variablenbezeichner in einer Deklaration platziert wurden.

Ein __declspec Attribut, das am Anfang einer benutzerdefinierten Typdeklaration angegeben ist, gilt für die Variable dieses Typs. Beispiel:

__declspec(dllimport) class X {} varX;

In diesem Fall wird das Attribut auf varX angewendet. Ein __declspec Attribut, das nach dem oder struct dem class Schlüsselwort (keyword) auf den benutzerdefinierten Typ angewendet wird. Beispiel:

class __declspec(dllimport) X {};

In diesem Fall wird das Attribut auf X angewendet.

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

decl-specifier-seq init-declarator-list ;

Dies decl-specifier-seq sollte unter anderem einen Basistyp (z int. B. , floatein , ein typedefOder ein Klassenname), eine Speicherklasse (z static. B. , , extern) oder die __declspec Erweiterung enthalten. Der init-declarator-list Zeigerteil der Deklarationen sollte unter anderem enthalten. Beispiel:

__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

Mit folgendem Code wird z. B. eine ganzzahlige threadlokale Variable deklariert und mit einem Wert initialisiert:

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

Ende Microsoft-spezifisch

Siehe auch

Schlüsselwörter
C extended storage-class attributes