__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-modifier
opt
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
, allocator
appdomain
, code_seg
deprecated
dllexport
, , dllimport
, naked
noreturn
nothrow
noinline
novtable
noalias
no_sanitize_address
process
jitintrinsic
empty_bases
safebuffers
selectany
restrict
spectre
, , e .thread
Supporta anche questi attributi dell'oggetto COM: property
e uuid
.
Gli code_seg
attributi , dllimport
empty_bases
noalias
nothrow
no_sanitize_address
naked
dllexport
restrict
selectany
property
thread
e 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 property
attributi , selectany
e 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
, , typedef
float
o 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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per