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:
loop1 |
||
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