__declspec

Sezione specifica Microsoft

La sintassi dell'attributo esteso per specificare le informazioni sulla classe di archiviazione usa la __declspec parola chiave , che specifica che un'istanza di un determinato tipo deve essere archiviata con un attributo della classe di archiviazione specifico di Microsoft elencato di seguito. Esempi di altri modificatori della classe di archiviazione includono le static parole chiave e extern . Tuttavia, queste parole chiave fanno parte della specifica ANSI dei linguaggi C e C++ e, di conseguenza, non sono coperte dalla sintassi degli attributi estesi. La sintassi degli attributi estesa semplifica e standardizza le estensioni specifiche Microsoft in base ai linguaggi C e C++.

Grammatica

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

Uno spazio vuoto separa la sequenza dei modificatori di dichiarazione. Gli esempi vengono visualizzati nelle sezioni successive.

La grammatica degli attributi estesi supporta questi attributi della classe di archiviazione specifici di Microsoft: align, allocate, allocatorappdomain, code_segdeprecateddllexport, , dllimport, nakednoreturnnothrownoinlinenovtablenoaliasno_sanitize_addressprocessjitintrinsicempty_basessafebuffersselectanyrestrictspectre, , e .thread Supporta anche questi attributi dell'oggetto COM: property e uuid.

Gli code_segattributi , dllimportempty_basesnoaliasnothrowno_sanitize_addressnakeddllexportrestrictselectanypropertythreade uuid della classe di archiviazione sono proprietà solo della dichiarazione dell'oggetto o della funzione a cui vengono applicate. L'attributo thread influisce solo su dati e oggetti. Gli naked attributi e spectre influiscono solo sulle funzioni. Gli dllimport attributi e dllexport influiscono su funzioni, dati e oggetti. Gli propertyattributi , selectanye uuid influiscono sugli oggetti COM.

Per la compatibilità con le versioni precedenti, _declspec è un sinonimo di __declspec a meno che non sia specificata l'opzione /Za del compilatore (Disabilita estensioni del linguaggio).

Le __declspec parole chiave devono essere inserite all'inizio di una semplice dichiarazione. Il compilatore ignora, senza avviso, le __declspec parole chiave inserite dopo * o & e davanti all'identificatore della variabile in una dichiarazione.

Un __declspec attributo specificato all'inizio di una dichiarazione di tipo definita dall'utente si applica alla variabile di tale tipo. Ad esempio:

__declspec(dllimport) class X {} varX;

In questo caso, l'attributo si applica a varX. Attributo __declspec posizionato dopo che la class parola chiave o struct si applica al tipo definito dall'utente. Ad esempio:

class __declspec(dllimport) X {};

In questo caso, l'attributo si applica a X.

Le linee guida generali per l'uso dell'attributo __declspec per le dichiarazioni semplici sono le seguenti:

decl-specifier-seq init-declarator-list ;

decl-specifier-seq Deve contenere, tra le altre cose, un tipo di base (ad esempio, int, , typedeffloato un nome di classe), una classe di archiviazione (ad esempio, static, extern) o l'estensione__declspec. L'oggetto init-declarator-list deve contenere, tra le altre cose, la parte del puntatore delle dichiarazioni. Ad esempio:

__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

Nel codice seguente, ad esempio, viene dichiarata una variabile locale di thread di tipo Integer e quindi inizializzata con un valore:

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

Fine sezione specifica Microsoft

Vedi anche

Parole chiave
Attributi della classe di archiviazione estesa C