__declspec__declspec

Específicos de MicrosoftMicrosoft Specific

La sintaxis de atributo extendido para especificar información de clase de almacenamiento utiliza la __declspec palabra clave, que especifica que una instancia de un tipo determinado se debe almacenar con un atributo de clase de almacenamiento específico de Microsoft enumerado a continuación.The extended attribute syntax for specifying storage-class information uses the __declspec keyword, which specifies that an instance of a given type is to be stored with a Microsoft-specific storage-class attribute listed below. Ejemplos de otros modificadores de clase de almacenamiento la estático y extern palabras clave.Examples of other storage-class modifiers include the static and extern keywords. 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.However, these keywords are part of the ANSI specification of the C and C++ languages, and as such are not covered by extended attribute syntax. La sintaxis de atributo extendido simplifica y normaliza las extensiones específicas de Microsoft a los lenguajes C y C++.The extended attribute syntax simplifies and standardizes Microsoft-specific extensions to the C and C++ languages.

GramáticaGrammar

decl-specifier:decl-specifier:
    __declspec ( extended-decl-modifier-seq )    __declspec ( extended-decl-modifier-seq )

extended-decl-modifier-seq:extended-decl-modifier-seq:
    extended-decl-modifieropt    extended-decl-modifieropt
    extended-decl-modifier extended-decl-modifier-seq    extended-decl-modifier extended-decl-modifier-seq

extended-decl-modifier:extended-decl-modifier:
    align( # )    align( # )
    allocate(" segname ")    allocate(" segname ")
    allocator    allocator
    dominio de aplicación    appdomain
    code_seg(" segname ")    code_seg(" segname ")
    En desuso    deprecated
    dllimport    dllimport
    dllexport    dllexport
    jitintrinsic    jitintrinsic
    naked    naked
    noalias    noalias
    noinline    noinline
    noreturn    noreturn
    nothrow    nothrow
    novtable    novtable
    Proceso    process
    property( { get=get_func_name | ,put=put_func_name } )    property( { get=get_func_name | ,put=put_func_name } )
    restringir    restrict
    safebuffers    safebuffers
    selectany    selectany
    Spectre(nomitigation)    spectre(nomitigation)
    thread    thread
    uuid(" ComObjectGUID ")    uuid(" ComObjectGUID ")

El espacio en blanco separa la secuencia de modificador de la declaración.White space separates the declaration modifier sequence. En secciones posteriores aparecen ejemplos.Examples appear in later sections.

Estos atributos de clase de almacenamiento específico de Microsoft admite la gramática de atributo extendido: alinear, asignar, asignador, appdomain, code_seg, en desuso, dllexport, dllimport, jitintrinsic, naked, noalias, noinline, noreturn, nothrow, novtable, proceso, restringir, safebuffers, selectany, spectre, y subproceso.Extended attribute grammar supports these Microsoft-specific storage-class attributes: align, allocate, allocator, appdomain, code_seg, deprecated, dllexport, dllimport, jitintrinsic, naked, noalias, noinline, noreturn, nothrow, novtable, process, restrict, safebuffers, selectany, spectre, and thread. También es compatible con estos atributos de objetos COM: propiedad y uuid.It also supports these COM-object attributes: property and uuid.

El code_seg, dllexport, dllimport, naked, noalias, nothrow , propiedad, restringir, selectany, subproceso, y uuidlos atributos de clase de almacenamiento son propiedades solo de la declaración del objeto o función a la que se aplican.The code_seg, dllexport, dllimport, naked, noalias, nothrow, property, restrict, selectany, thread, and uuid storage-class attributes are properties only of the declaration of the object or function to which they are applied. El subproceso atributo afecta a los datos y solo los objetos.The thread attribute affects data and objects only. El naked y spectre atributos que afectan a las funciones solo.The naked and spectre attributes affect functions only. El dllimport y dllexport atributos que afectan a funciones, datos y objetos.The dllimport and dllexport attributes affect functions, data, and objects. El propiedad, selectany, y uuid atributos que afectan a los objetos COM.The property, selectany, and uuid attributes affect COM objects.

Para ofrecer compatibilidad con versiones anteriores, _declspec es un sinónimo de __declspec a menos que la opción de compilador /Za (deshabilitar extensiones de lenguaje) es especificado.For compatibility with previous versions, _declspec is a synonym for __declspec unless compiler option /Za (Disable language extensions) is specified.

El __declspec palabras clave deben colocarse al principio de una declaración simple.The __declspec keywords should be placed at the beginning of a simple declaration. El compilador omite, sin advertencia, las __declspec palabras clave con posterioridad * o & y delante del identificador en una declaración de variable.The compiler ignores, without warning, any __declspec keywords placed after * or & and in front of the variable identifier in a declaration.

Un __declspec atributo especificado al principio de una declaración de tipo definido por el usuario se aplica a la variable de ese tipo.A __declspec attribute specified in the beginning of a user-defined type declaration applies to the variable of that type. Por ejemplo:For example:

__declspec(dllimport) class X {} varX;

En este caso, el atributo se aplica a varX.In this case, the attribute applies to varX. Un __declspec atributo coloca después la clase o struct palabra clave se aplica al tipo definido por el usuario.A __declspec attribute placed after the class or struct keyword applies to the user-defined type. Por ejemplo:For example:

class __declspec(dllimport) X {};

En este caso, el atributo se aplica a X.In this case, the attribute applies to X.

La regla general para utilizar el __declspec atributo para las declaraciones simples es como sigue:The general guideline for using the __declspec attribute for simple declarations is as follows:

decl-specifier-seq init-declarator-list;decl-specifier-seq init-declarator-list;

El decl-specifier-seq , entre otras cosas, debe contener un tipo base (por ejemplo, int, float, un typedef, o un nombre de clase), un clase de almacenamiento (por ejemplo, estático, extern), o la __declspec extensión.The decl-specifier-seq should contain, among other things, a base type (e.g. int, float, a typedef, or a class name), a storage class (e.g. static, extern), or the __declspec extension. El init-declarator-list debe contener, entre otras cosas, la parte de puntero de declaraciones.The init-declarator-list should contain, among other things, the pointer part of declarations. Por ejemplo:For example:

__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:The following code declares an integer thread local variable and initializes it with a value:

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

FIN de Específicos de MicrosoftEND Microsoft Specific

Vea tambiénSee also

Palabras claveKeywords
Atributos extendidos de clase de almacenamiento de CC Extended Storage-Class Attributes