warning
pragma
Habilita a modificação seletiva do comportamento das 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 )
Observações
Os seguintes parâmetros especificador de aviso estão disponíveis.
warning-specifier | Significado |
---|---|
1 , 2 , 3 , 4 |
Aplique o nível determinado aos avisos especificados. Também ativa um aviso especificado que está desativado por padrão. |
default |
Redefina o comportamento de aviso para seu valor padrão. Também ativa um aviso especificado que está desativado por padrão. O aviso será gerado no nível padrão, documentado. Para obter mais informações, consulte 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 apenas uma vez. |
suppress |
Envia por push o estado atual do pragma na pilha, desabilita o aviso especificado para a próxima linha e, em seguida, exibe a pilha de avisos para que o estado pragma seja redefinido. |
A instrução de código a seguir ilustra que um parâmetro warning-number-list
pode conter vários números de aviso e que vários parâmetros de warning-specifier
podem ser especificados na mesma diretiva pragma.
#pragma warning( disable : 4507 34; once : 4385; error : 164 )
Essa 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 qualquer número de aviso que esteja 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 do warning
pragma na função para alterar o estado de um número de aviso maior que 4699 só entra em vigor após o final da função. O exemplo a seguir mostra o posicionamento correto de um warning
pragma para desabilitar uma mensagem de aviso de geração de código e 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 o corpo da função, a última configuração do warning
pragma estará em vigor para toda a função.
Efetuar push e pop
O warning
pragma também dá suporte à sintaxe a seguir, em que o parâmetro opcional n representa um nível de aviso (1 a 4).
#pragma warning( push [ , n ] )
#pragma warning( pop )
O pragmawarning( push )
armazena o estado de aviso atual para cada aviso. O pragmawarning( push, n )
armazena o estado atual para cada aviso e define o nível de aviso global como n.
O pragmawarning( pop )
exibe o último estado de aviso enviado para a pilha. Todas as alterações feitas no estado de aviso entre push
e pop
sã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 cada aviso (inclui 4705, 4706 e 4707) para o que era no início do código.
Ao escrever arquivos de cabeçalho, você 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
.