__declspec
Section spécifique à Microsoft
La syntaxe d’attribut étendue permettant de spécifier des informations de classe de stockage utilise le __declspec
mot clé, qui spécifie qu’une instance d’un type donné doit être stockée avec un attribut de classe de stockage spécifique à Microsoft répertorié ci-dessous. Parmi les exemples d’autres modificateurs de classe de stockage figurent les mots clés static
et extern
. Toutefois, ces mot clé font partie de la spécification ANSI des langages C et C++, et, par conséquent, ne sont pas couvertes par la syntaxe d’attribut étendue. La syntaxe à attributs étendus simplifie et normalise les extensions spécifiques à Microsoft pour les langages C et C++.
Grammaire
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(
numéro)
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")
Un espace blanc sépare la séquence de modificateur de déclaration. Des exemples sont donnés dans des sections ultérieures.
La grammaire des attributs étendus prend en charge ces attributs de classe de stockage spécifiques à Microsoft : align
, , allocate
, appdomain
empty_bases
dllexport
dllimport
jitintrinsic
deprecated
code_seg
allocator
, naked
, noalias
, , nothrow
selectany
spectre
noreturn
no_sanitize_address
thread
novtable
process
restrict
safebuffers
noinline
Il prend également en charge ces attributs COM-object : property
et uuid
.
Les code_seg
attributs , empty_bases
dllimport
noalias
nothrow
no_sanitize_address
naked
dllexport
restrict
selectany
property
thread
et uuid
de classe de stockage ne sont des propriétés que de la déclaration de l’objet ou de la fonction à laquelle ils sont appliqués. L’attribut thread
affecte uniquement les données et les objets. Les naked
attributs et spectre
les fonctions affectent uniquement les fonctions. dllexport
Les dllimport
attributs affectent les fonctions, les données et les objets. Les property
attributs et uuid
les selectany
objets COM affectent les objets COM.
Pour la compatibilité avec les versions précédentes, _declspec
est un synonyme de __declspec
l’option /Za
du compilateur (Désactiver les extensions de langage) spécifiée.
Les __declspec
mot clé doivent être placées au début d’une déclaration simple. Le compilateur ignore, sans avertissement, les __declspec
mot clé placées après * ou & et devant l’identificateur de variable dans une déclaration.
Un __declspec
attribut spécifié au début d’une déclaration de type défini par l’utilisateur s’applique à la variable de ce type. Par exemple :
__declspec(dllimport) class X {} varX;
Dans ce cas, l'attribut s'applique à varX
. Un __declspec
attribut placé après l’mot clé class
struct
s’applique au type défini par l’utilisateur. Par exemple :
class __declspec(dllimport) X {};
Dans ce cas, l'attribut s'applique à X
.
Les instructions générales relatives à l’utilisation de l’attribut __declspec
pour les déclarations simples sont les suivantes :
decl-specifier-seq
init-declarator-list
;
Il decl-specifier-seq
doit contenir, entre autres, un type de base (par exemple, int
, float
un typedef
ou un nom de classe), une classe de stockage (par exemple, static
, extern
) ou l’extension __declspec
. Il init-declarator-list
doit contenir, entre autres, la partie pointeur des déclarations. Par exemple :
__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
Le code suivant déclare une variable locale de thread entière et lui affecte une valeur initiale :
// Example of the __declspec keyword
__declspec( thread ) int tls_i = 1;
FIN de la section spécifique à Microsoft
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour