Compartilhar via


__declspec

Específicos do Microsoft

A sintaxe de atributo estendido para especificar informações de classe de armazenamento utiliza o __declspec palavra-chave, que especifica que uma instância de um determinado tipo deve ser armazenado com um atributo de classe de armazenamento específicas da Microsoft listado abaixo.Exemplos de outros modificadores de classe de armazenamento do static e extern as palavras-chave.No entanto, essas palavras-chave é parte da especificação ANSI das linguagens c e C++ e como tal, não é cobertos pela sintaxe de atributo estendido.A sintaxe de atributo estendido simplifica e padroniza extensões específicas da Microsoft para as linguagens c e C++.

Gramática

  • especificador de Decl:
    __declspec ( Extended-decl-modificador-seq)

  • Extended-decl-modificador-seq:
    modificador de decl estendidoopt

    modificador de decl Extended estendido-decl-modificador-seq

  • modificador de decl estendido:
    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")

Espaço em branco separa a seqüência de modificador de declaração.Exemplos aparecem em seções posteriores.

Esses atributos de classe de armazenamento específicas da Microsoft oferece suporte a atributos estendidos gramática: Alinhar, alocar, appdomain, preterido, dllexport, dllimport, jitintrinsic, nua, noalias, noinline, noreturn, nothrow, novtable, processo, restringir, safebuffers, selectany, e segmento.Ele também oferece suporte a esses atributos de objeto do COM: propriedade e uuid.

O dllexport, dllimport, naked, noalias, nothrow, property, restrict, selectany, thread, e uuid atributos de classe de armazenamento são propriedades somente da declaração do objeto ou função ao qual são aplicadas.O thread atributo afeta os dados e objetos apenas.O naked atributo afeta somente funções.O dllimport e dllexport atributos afetam funções, dados e objetos.O property, selectany, e uuid atributos afetam objetos COM.

O __declspec as palavras-chave devem ser colocadas no início de uma declaração simples.O compilador ignora, sem aviso, qualquer __declspec as palavras-chave colocada após * ou & e de frente para o identificador da variável em uma declaração.

A __declspec atributo especificado no início de uma declaração de tipo definido pelo usuário se aplica à variável desse tipo.Por exemplo:

__declspec(dllimport) class X {} varX;

Nesse caso, o atributo se aplica a varX.A __declspec atributo colocado após o class ou struct palavra-chave se aplica ao tipo definido pelo usuário.Por exemplo:

class __declspec(dllimport) X {};

Nesse caso, o atributo se aplica a X.

A orientação geral para usar o __declspec atributo para declarações simples é o seguinte:

decl-specifier-seq declarator-list;

O decl-especificador-seq deve conter, entre outras coisas, um tipo base (por exemplo,intfloat, um typedef, ou um nome de classe), um armazenamento de classe (por exemplo,static, extern), or the __declspec extension.O init-Declarador-list deve conter, entre outras coisas, a parte do ponteiro de declarações.Por exemplo:

__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

O código a seguir declara uma variável de local de thread inteiro e o inicializa com um valor:

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

Consulte também

Referência

Palavras-chave C++

Atributos de classe de armazenamento estendido c