warning
pragma
Permite a modificação seletiva do comportamento de mensagens de aviso do compilador.
Sintaxe
#pragma warning(
warning-specifier
:
warning-number-list
;
warning-specifier
:
warning-number-list
[ ... ])
#pragma warning( push
,
[ n ])
#pragma warning( pop )
Comentários
Os seguintes parâmetros de especificador de aviso estão disponíveis.
warning-specifier | Significado |
---|---|
1 , 2 , 3 , 4 |
Aplique o nível fornecido aos avisos especificados. Também ativa um aviso especificado que é desativado por padrão. |
default |
Redefina o comportamento de aviso para seu valor padrão. Também ativa um aviso especificado que é desativado por padrão. O aviso será gerado em seu nível padrão e documentado. Para obter mais informações, confira Avisos do compilador desativados por padrão. |
disable |
Não emita as mensagens de aviso especificadas. |
error |
Relate os avisos especificados como erros. |
once |
Exiba as mensagens especificadas somente uma vez. |
suppress |
Empurra o estado atual do pragma na pilha, desabilita o aviso especificado para a próxima linha e depois exibe a pilha de aviso para que o estado de pragma seja redefinido. |
A seguinte instrução de código mostra que um parâmetro warning-number-list
pode conter vários números de aviso e que vários parâmetros warning-specifier
podem ser especificados na mesma diretiva de pragma.
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
Esta diretiva é funcionalmente equivalente ao seguinte código:
// Disable warning messages 4507 and 4034.
#pragma warning( disable : 4507 34 )
// Issue warning C4385 only once.
#pragma warning( once : 4385 )
// Report warning C4164 as an error.
#pragma warning( error : 164 )
O compilador adiciona 4000 a todos os números de aviso que estejam entre 0 e 999.
Os números de aviso no intervalo 4700-4999 estão associados à geração de código. Para esses avisos, o estado do aviso em vigor quando o compilador atinge a definição de função permanece em vigor para o restante da função. O uso de warning
pragma na função para alterar o estado de um aviso maior que 4699 só entra em vigor depois do término da função. O exemplo a seguir mostra a colocação correta de um warning
pragma para desabilitar uma mensagem de aviso de geração de código e, depois, restaurá-la.
// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test() {
int x;
int y = x; // no C4700 here
#pragma warning(default:4700) // C4700 enabled after Test ends
}
int main() {
int x;
int y = x; // C4700
}
Observe que em todo um corpo de função, a configuração mais recente do warning
pragma será aplicada à função inteira.
Enviar por push e mostrar
O warning
pragma também dá suporte à sintaxe a seguir, em que o parâmetro n opcional representa um nível de aviso (1 a 4).
#pragma warning( push [ , n ] )
#pragma warning( pop )
O pragmawarning( push )
de armazena o estado atual de aviso de cada aviso. O pragmawarning( push, n )
armazena o estado atual de cada aviso e define o nível de aviso global para n.
O pragmawarning( pop )
mostra o último estado de aviso enviado por push para a pilha. Todas as modificações feitas no estado de aviso entre push
e pop
serão desfeitas. Considere este exemplo:
#pragma warning( push )
#pragma warning( disable : 4705 )
#pragma warning( disable : 4706 )
#pragma warning( disable : 4707 )
// Some code
#pragma warning( pop )
No final desse código, pop
restaura o estado de todos os avisos (inclui 4705, 4706, 4707) e o que era no início do código.
Quando você grava arquivos de cabeçalho, pode usar push
e pop
para garantir que as alterações de estado de aviso feitas por um usuário não impeçam que os cabeçalhos sejam compilados corretamente. Use push
no início do cabeçalho e pop
no final. Por exemplo, você pode ter um cabeçalho que não é compilado de forma limpa no nível de aviso 4. O código a seguir altera o nível de aviso para 3 e restaura o nível de aviso original no final do cabeçalho.
#pragma warning( push, 3 )
// Declarations/definitions
#pragma warning( pop )
Para obter mais informações sobre as opções do compilador que ajudam a suprimir avisos, consulte /FI
e /w
.