__declspec

Específicos de Microsoft

La sintaxis de atributo extendido para especificar información de clase de almacenamiento utiliza la palabra clave de __declspec , que especifica que una instancia de un tipo determinado se debe almacenar con un atributo Microsoft-específico de clase de almacenamiento mostrado a continuación.Los ejemplos de otros modificadores de clase de almacenamiento incluyen las palabras clave de static y de 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 estandariza extensiones específicas a los lenguajes c y C++.

Gramática

  • desclasificación-especificador:
    __declspec (extender-desclasificación-modificador-seq )

  • extender-desclasificación-modificador-seq:
    extender-desclasificación-modificadoropt

    extender-desclasificación-modificador extender-desclasificación-modificador-seq

  • extender-desclasificación-modificador:
    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")

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

La gramática de atributo extendido admite estos atributos específicos de la clase de almacenamiento: alinear, asigna, appdomain, obsoleto, dllexport, dllimport, jitintrinsic, naked, noalias, noinline, noreturn, nothrow, novtable, proceso, limitado, safebuffers, selectany, y Subproceso.También admite estos atributos de objetos COM: propiedad y uuid.

dllexport, dllimport, naked, noalias, nothrow, property, restrict, selectany, thread, y los atributos de clase de almacenamiento de uuid son propiedades sólo de la declaración del objeto o la función a los que se aplican.El atributo de thread afecta a datos y a objetos únicamente.El atributo de naked afecta a funciones sólo.El efecto de los atributos de dllimport y de dllexport funciona, los datos, y los objetos.property, selectany, y los atributos de uuid afectan a objetos COM.

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

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

__declspec(dllimport) class X {} varX;

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

class __declspec(dllimport) X {};

En este caso, el atributo se aplica a X.

La regla general para uso del atributo __declspec para las declaraciones sencillas es la siguiente:

decl-specifier-seq declarator-list;

desclasificación-especificador-seq debe contener, entre otras cosas, un tipo base (por ejemplo.int, float, typedef, o un nombre de clase), una clase de almacenamiento (por ejemplo.static, extern), o la extensión de __declspec .init-declarante-lista debe contener, entre otras cosas, la parte del puntero de declaraciones.Por ejemplo:

__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

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

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

Vea también

Referencia

Palabras clave de C++

C extendidas los atributos de clase de almacenamiento