__declspec

Específicos de Microsoft

La sintaxis de atributo extendido para especificar información de clase de almacenamiento usa la palabra clave , que especifica que una instancia de un tipo determinado se almacenará con un atributo de clase de almacenamiento específico de Microsoft que se muestra __declspec a continuación. Otros ejemplos de modificadores de clase de almacenamiento son las palabras clave static y extern . Sin embargo, estas palabras clave forman parte de la especificación ANSI de los lenguajes C y C++ y, como tales no se incluyen en la sintaxis de atributo extendido. La sintaxis de atributo extendido simplifica y normaliza las extensiones específicas de Microsoft a los lenguajes C y C++.

Gramática

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

El espacio en blanco separa la secuencia de modificador de la declaración. En secciones posteriores aparecen ejemplos.

La gramática de atributos extendidos admite estos atributos de clase de almacenamiento específicos de Microsoft: align , , , , allocate allocator appdomain code_seg deprecated dllexport dllimport , jitintrinsic naked noalias noinline y noreturn nothrow novtable no_sanitize_address process restrict safebuffers selectany spectre thread . También admite estos atributos de objeto COM: property y uuid .

Los atributos de clase de almacenamiento , y son solo propiedades de la declaración del objeto o la función a la que code_seg dllexport dllimport naked se noalias nothrow no_sanitize_address property restrict selectany thread uuid aplican. El thread atributo solo afecta a los datos y los objetos. Los naked atributos y solo afectan a las spectre funciones. Los dllimport atributos y afectan a dllexport funciones, datos y objetos. Los property atributos , y afectan a los objetos selectany uuid COM.

Por compatibilidad con versiones anteriores, es un sinónimo de a menos que se especifique la opción del compilador _declspec __declspec /Za ( Disable language extensions).

Las __declspec palabras clave deben colocarse al principio de una declaración simple. El compilador omite, sin advertencia, las palabras clave colocadas después de * o & y delante del identificador __declspec de variable en una declaración.

Un atributo especificado al principio de una declaración de tipo definido por el usuario se aplica __declspec a la variable de ese tipo. Por ejemplo:

__declspec(dllimport) class X {} varX;

En este caso, el atributo se aplica a varX. Un __declspec atributo situado después de la palabra clave o se aplica al tipo definido por el class struct usuario. Por ejemplo:

class __declspec(dllimport) X {};

En este caso, el atributo se aplica a X.

La guía general para usar el __declspec atributo para declaraciones simples es la siguiente:

decl-specifier-seq init-declarator-list;

Decl-specifier-seq debe contener, entre otras cosas, un tipo base (por ejemplo, , , , o un nombre de clase), una clase de almacenamiento int float typedef (por ejemplo, , ) o la static extern __declspec extensión. Init-declarator-list debe contener, entre otras cosas, la parte del puntero de las declaraciones. Por ejemplo:

__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

El código siguiente declara una variable local para el subproceso de entero y la inicializa con un valor:

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

FIN de Específicos de Microsoft

Vea también

Palabras clave
Atributos extendidos de clase de almacenamiento de C