Partager via


__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;

Voir aussi

Référence

Mots clés C++

C'est étendu des attributs de classe de stockage