Compartilhar via


warning pragma

Habilita a modificação seletiva do comportamento das mensagens de aviso do compilador.

Sintaxe

#pragma warning(
warning-specifier : warning-number-list , justification : string-literal[ ]
 [;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.

especificador de aviso Significado
1, 2, , 34 Aplique o nível determinado aos avisos especificados. Por exemplo: #pragma warning (3 : 5033) desativa o aviso 5033 (normalmente um aviso de nível 1), a menos que o nível de aviso esteja definido como /w3 ou superior. Também pode ser usado para ativar 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. A propriedade opcional justification é permitida.
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 propriedade opcional justification é permitida.

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 4034; once : 4385; error : 164 )

No entanto, quando o justification campo está presente, apenas um número de aviso pode ser especificado. A instrução de código a seguir ilustra o uso do justification campo.

#pragma warning( disable : 4507, justification : "This warning is disabled" )

Os justification campos permitem explicar por que um aviso está sendo desabilitado ou suprimido. O justification campo só tem suporte para o disable e suppresswarning-specifier. Esse valor aparecerá na saída SARIF quando a /analyze:log:includesuppressed opção for especificada. Seu valor é um literal de cadeia de caracteres estreita codificado em UTF-8.

Essa diretiva é funcionalmente equivalente ao seguinte código:

// Disable warning messages 4507 and 4034.
#pragma warning(disable : 4507 4034)

// 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 warningpragma 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 warningpragma 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 compiling Test()
}

int main()
{
   int x;
   int y = x; // C4700
}

Observe que, em todo o corpo da função, a última configuração do warningpragma estará em vigor para toda a função.

Efetuar push e pop

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

Consulte também

diretivas Pragma e as palavras-chave __pragma e _Pragma