__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 almacenará con un atributo de clase de almacenamiento específico de Microsoft que se enumera 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. Algunos ejemplos de otros modificadores de clase de almacenamiento incluyen las static extern palabras clave y.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-modifier opt    extended-decl-modifieropt
    extended-decl-modifier extended-decl-modifier-seq    extended-decl-modifier extended-decl-modifier-seq

extended-decl-modifier:extended-decl-modifier:
    align(***número de**)*    align( number )
    allocate("segname")    allocate(" segname ")
    allocator    allocator
    appdomain    appdomain
    code_seg("segname")    code_seg(" segname ")
    deprecated    deprecated
    dllimport    dllimport
    dllexport    dllexport
    jitintrinsic    jitintrinsic
    naked    naked
    noalias    noalias
    noinline    noinline
    noreturn    noreturn
    nothrow    nothrow
    novtable    novtable
    process    process
    property({ get= Get-FUNC-Name | ,put= Put-FUNC-Name })    property( { get=get-func-name | ,put=put-func-name } )
    restrict    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.

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 , noreturn nothrow novtable process restrict safebuffers selectany spectre thread ,,,,,,, y.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 admite estos atributos de objetos COM: property y uuid .It also supports these COM-object attributes: property and uuid.

Los code_seg dllexport atributos de clase de almacenamiento,,,, dllimport naked noalias ,,,,, nothrow property restrict selectany thread y uuid son propiedades solo de la declaración del objeto o la 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 thread atributo solo afecta a los datos y objetos.The thread attribute affects data and objects only. Los naked spectre atributos y solo afectan a las funciones.The naked and spectre attributes affect functions only. Los dllimport dllexport atributos y afectan a funciones, datos y objetos.The dllimport and dllexport attributes affect functions, data, and objects. Los property selectany atributos, y uuid afectan a objetos com.The property, selectany, and uuid attributes affect COM objects.

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

Las __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 colocadas después de * o & y delante del identificador de variable en una declaración.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 tipos definidos 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 colocado después de class la struct palabra clave o 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 la siguiente: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;

Decl-Specifier-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 __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. Init-declarator-List debe contener, entre otras cosas, la parte del puntero de las 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