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 warningpragma 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 warningpragma 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 warningpragma será aplicada à função inteira.

Enviar por push e mostrar

O warningpragma 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.

Confira também

Diretivas do Pragma e as palavras-chave do __pragma e _Pragma