Compartilhar via


Diretivas pragma e __Pragma palavra-chave

Diretivas pragma especificam recursos do compilador ou operacionais específicas de computador.O __pragma palavra-chave, que é específico para o compilador da Microsoft, permite que você as diretivas pragma código dentro das definições de macro.

#pragma token-string
__pragma(token-string)

Comentários

Cada implementação de c e C++ oferece suporte a alguns recursos exclusivos para sua máquina host ou sistema operacional.Por exemplo, alguns programas, devem exercer controle preciso sobre as áreas de memória onde os dados são colocados ou para controlar a forma como determinado funções recebem parâmetros.O #pragma diretivas oferecem uma forma para cada compilador oferecer recursos específicos do computador e do sistema operacional, mantendo total compatibilidade com as linguagens c e C++.

Pragmas são específicos máquina ou de sistema operacional por definição e normalmente diferentes para cada compilador.Pragmas pode ser usados em instruções condicionais, para fornecer nova funcionalidade de pré-processador ou fornecer informações definidos na implementação do compilador.

O token-string é uma série de caracteres que fornece uma instrução específica do compilador e argumentos, se houver.O sinal de número (#) deve ser o primeiro caractere não espaço em branco na linha que contém o pragma; caracteres de espaço em branco podem separar o sinal de número e a palavra "pragma".A seguir #pragma, escreva o texto que o tradutor pode analisar como símbolos de pré-processamento.O argumento #pragma está sujeito a expansão de macro.

Se o compilador encontra um pragma não reconhece, ele emite um aviso e continuará a compilação.

Os compiladores Microsoft C e C++ reconhecem pragmas seguintes:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

comentário

componente

conform1

const_seg

data_seg

substituído

detect_mismatch

fenv_access

float_control

fp_contract

função

hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

intrínseca

loop1

make_public

gerenciado

mensagem

OMP

uma vez

otimizar

Pack

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

seção

setlocale

strict_gs_check

não gerenciado

vtordisp1

Aviso

1.Suportado apenas pelo compilador C++.

Pragmas e opções do compilador

Alguns pragmas fornecem a mesma funcionalidade que as opções do compilador.Quando é encontrado um pragma no código-fonte, ele substitui o comportamento especificado pela opção de compilador.Por exemplo, se você tiver especificado /Zp8, você pode substituir essa configuração de compilador para seções específicas do código com pack:

cl /Zp8 ...

<file> - packing is 8
// ...
#pragma pack(push, 1) - packing is now 1
// ...
#pragma pack(pop) - packing is 8
</file>

__Pragma() palavra-chave

Microsoft específico

O compilador também oferece suporte a __pragma palavra-chave, tem a mesma funcionalidade como o #pragma diretiva, mas pode ser embutido usado em uma definição de macro.O #pragma diretiva não pode ser usada em uma definição de macro porque o compilador interpretará o caractere de sinal de número ('#') na diretiva para ser o operador stringizing (#).

O exemplo de código a seguir demonstra como o __pragma palavra-chave pode ser usado em uma macro.Esse código é extraído do cabeçalho mfcdual.h o exemplo de ACDUAL "Exemplos de suporte do compilador COM":

#define CATCH_ALL_DUAL \
CATCH(COleException, e) \
{ \
_hr = e->m_sc; \
} \
AND_CATCH_ALL(e) \
{ \
__pragma(warning(push)) \
__pragma(warning(disable:6246)) /*disable _ctlState prefast warning*/ \
AFX_MANAGE_STATE(pThis->m_pModuleState); \
__pragma(warning(pop)) \
_hr = DualHandleException(_riidSource, e); \
} \
END_CATCH_ALL \
return _hr; \

End Microsoft específico

Consulte também

Referência

Pragmas c

Palavras-chave C++

Outros recursos

Referência de pré-processador de C/C++