__declspec
Spécifique à Microsoft
La syntaxe d'attribut étendu pour spécifier des informations de classe de stockage utilise le mot clé d' __declspec , qui spécifie qu'une instance d'un type donné doit être enregistrée avec un attribut de classe de stockage spécifiques à microsoft répertorié ci-dessous.Ces autres modificateurs de classe de stockage incluent les mots clés d' static et d' extern .Toutefois, ces mots clés font partie de la spécification ANSI les langages C et C++, et comme ces ne sont pas prises en charge par la syntaxe d'attribut étendu.La syntaxe d'attribut étendu simplifie et permet de normaliser les extensions spécifiques à microsoft aux langages C et C++.
Grammaire
déclassement-spécificateur:
__declspec (étendre-déclassement-modificateur-seq )étendre-déclassement-modificateur-seq:
étendre-déclassement-modificateuroptétendre-déclassement-modificateur étendre-déclassement-modificateur-seq
étendre-déclassement-modificateur:
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")
l'espace blanc sépare la séquence de modificateur de déclaration.Les exemples apparaissent dans les sections suivantes.
Prend en charge de syntaxe d'attribut étendu ces attributs de classe de stockage spécifiques à microsoft : aligner, allouez, appdomain, déconseillé, dllexport, dllimport, jitintrinsic, naked, noalias, noinline, noreturn, declspec (nothrow), novtable, processus, restreignez, safebuffers, selectany, et thread.Il prend également en charge ces attributs d'objet COM : propriété et uuid.
dllexport, dllimport, naked, noalias, nothrow, property, restrict, selectany, thread, et les attributs de classe de stockage d' uuid sont des propriétés uniquement de la déclaration de l'objet ou fonction à ce qu'ils sont appliqués.L'attribut d' thread affecte des données et des objets uniquement.L'attribut d' naked affecte les fonctions uniquement.L'impact d'attributs d' dllimport et d' dllexport s'exécute, les données, les objets et.property, selectany, et les attributs d' uuid affectent des objets COM.
Les mots clés d' __declspec doivent être placés au début d'une déclaration simple.Le compilateur n'ignore, sans avertissement, aucun mot clé d' __declspec placés après * ou & et devant l'identificateur variable dans une déclaration.
Un attribut d' __declspec 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 attribut d' __declspec placé après le mot clé d' class ou d' struct s'applique au type défini par l'utilisateur.Par exemple :
class __declspec(dllimport) X {};
dans ce cas, l'attribut s'applique à X.
La règle générale pour l'utilisation de l'attribut d' __declspec pour les déclarations simples est la suivante :
decl-specifier-seq declarator-list;
déclassement-spécificateur-seq doit contenir, entre autres, un type de base (par exemple.int, float, typedef, ou un nom de classe), une classe de stockage (par exemple.static, extern), ou l'extension d' __declspec .init-déclarateur-liste doit contenir, entre autres, la partie du pointeur de déclarations.Par exemple :
__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
Le code suivant déclare une variable locale de thread entière et lui affecte une valeur :
// Example of the __declspec keyword
__declspec( thread ) int tls_i = 1;