Partilhar via


Avisos do compilador que estão desativados por padrão

O compilador suporta avisos que são desativados por padrão, porque a maioria dos desenvolvedores não os considera úteis. Em alguns casos, eles alertam sobre uma escolha estilística, ou sobre expressões idiomáticas comuns em códigos mais antigos. Outros avisos são sobre o uso de uma extensão da Microsoft para o idioma. Alguns avisos indicam uma área onde os programadores muitas vezes fazem suposições incorretas, o que pode levar a um comportamento inesperado ou indefinido. Se todos esses avisos estiverem ativados, alguns deles podem aparecer muitas vezes nos cabeçalhos da biblioteca. As bibliotecas de tempo de execução C e as bibliotecas padrão C++ destinam-se a não emitir avisos apenas no nível /W4de aviso.

Ativar avisos desativados por padrão

Você pode habilitar avisos que normalmente estão desativados por padrão usando uma das seguintes opções:

  • #pragma warning(default : warning_number)

    O aviso especificado (warning_number) está habilitado em seu nível padrão. A documentação para o aviso contém o nível padrão do aviso.

  • #pragma warning( : warning_levelwarning_number)

    O aviso especificado (warning_number) está habilitado no nível especificado (warning_level).

  • /Wall

    /Wall Habilita todos os avisos que estão desativados por padrão. Se você usar essa opção, poderá desativar avisos individuais usando a /wd opção.

  • /wL nnnn

    Esta opção permite avisar nnnn no nível L.

Avisos desativados por padrão

Visual Studio 2015 e versões posteriores

Os seguintes avisos são desativados por padrão no Visual Studio 2015 e versões posteriores:

Advertência Mensagem
C4061 (nível 4) O enumerador 'identifier' em uma opção de enum 'enumeration' não é explicitamente manipulado por um rótulo de caso.
C4062 (nível 4) O enumerador 'identifier' em uma opção de enum 'enumeration' não é manipulado.
C4165 (nível 1) «HRESULT» está a ser convertido em «bool»; Tem certeza de que é isso que você quer?
C4191 (nível 3) «Operador»: conversão insegura de «type_of_expression» para «type_required»
C4242 (nível 4) «Identificador»: conversão de «tipo1» para «tipo2», possível perda de dados
C4254 (nível 4) «Operador», conversão de «tipo1» para «tipo2», possível perda de dados
C4255 (nível 4) «Função»: nenhum protótipo de função dado: conversão de «()» em «(vazio)»
C4263 (nível 4) 'função': a função de membro não substitui nenhuma função de membro virtual de classe base
C4264 (nível 1) 'virtual_function': nenhuma substituição disponível para a função de membro virtual da 'classe' base; a função está oculta
C4265 (nível 3) 'classe': classe tem funções virtuais, mas destructor não é virtual
C4266 (nível 4) 'função': nenhuma substituição disponível para a função de membro virtual a partir do 'tipo' base; a função está oculta
C4287 (nível 3) «operador»: incompatibilidade de constante não assinada ou negativa
C4289 (nível 4) extensão não normalizada utilizada: «var»: a variável de controlo de loop declarada no for-loop é utilizada fora do âmbito for-loop
C4296 (nível 4) 'operador': a expressão é sempre falsa
C4339 (nível 4) 'type' : uso de tipo indefinido detetado em metadados CLR - o uso deste tipo pode levar a uma exceção de tempo de execução
C4342 (nível 1) Mudança de comportamento: 'função' chamada, mas um operador membro foi chamado em versões anteriores
C4350 (nível 1) mudança de comportamento: 'membro1' chamado em vez de 'membro2'
C4355 'this' : usado na lista de inicializadores de membros base
C4365 (nível 4) 'ação': conversão de 'type_1' para 'type_2', incompatibilidade assinada/não assinada
C4370 (nível 3) layout de classe mudou de uma versão anterior do compilador devido a melhor embalagem
C4371 (nível 3) 'class-name': layout da classe pode ter mudado de uma versão anterior do compilador devido ao melhor empacotamento de membro 'membro'
C4388 (nível 4) incompatibilidade assinada/não assinada
C4412 (nível 2) «função»: a assinatura da função contém o tipo «tipo»; Os objetos C++ não são seguros para passar entre código puro e misto ou nativo
C4426 (nível 1) sinalizadores de otimização alterados após a inclusão do cabeçalho, podem ser devido a #pragma otimize() 14.1
C4435 (nível 4) 'class1' : O layout do objeto em /vd2 será alterado devido à base virtual 'class2'.
C4437 (nível 4) dynamic_cast da base virtual 'class1' para 'class2' pode falhar em alguns contextos.
C4444 (nível 3) A «__unaligned» de nível superior não é implementada neste contexto.
C4464 (nível 4) relativo incluir caminho contém '..'
C4471 (nível 4) uma declaração futura de uma enumeração sem escopo deve ter um tipo subjacente (int assumido) Perm
C4472 (nível 1) 'identifier' é um enum nativo: adicione um especificador de acesso (privado/público) para declarar um enum gerenciado
C4514 (nível 4) 'função': a função embutida não referenciada foi removida
C4536 (nível 4) «Nome do tipo»: o nome do tipo excede o limite de metadados de carateres «limite»
C4545 (nível 1) expressão antes de vírgula avalia para uma função que está faltando uma lista de argumentos
C4546 (nível 1) chamada de função antes da lista de argumentos ausentes por vírgula
C4547 (nível 1) «Operador», operador antes da vírgula não produz efeitos; operador esperado com efeito colateral
C4548 (nível 1) a expressão antes da vírgula não tem efeito; expressão esperada com efeito colateral
C4549 (nível 1) «operador1», operador antes da vírgula não produz efeitos; Pretendia "Operador2"?
C4555 (nível 1) a expressão não tem efeito; expressão esperada com efeito colateral
C4557 (nível 3) «__assume» contém o efeito «efeito»
C4571 (nível 4) semântica informativa: catch(...) alterada desde o Visual C++ 7.1; as exceções estruturadas (SEH) já não são detetadas
C4574 (nível 4) «identificador» é definido como «0»: pretendia utilizar « identificador #if»?
C4577 (nível 1) 'noexcept' usado sem modo de tratamento de exceção especificado; a rescisão por exceção não é garantida. Especificar /EHsc
C4582 (nível 4) 'type': construtor não é implicitamente chamado
C4583 (nível 4) 'tipo': destructor não é implicitamente chamado
C4587 (nível 1) 'anonymous_structure': mudança de comportamento: construtor não é mais implicitamente chamado
C4588 (nível 1) 'anonymous_structure': mudança de comportamento: destruidor não é mais implicitamente chamado
C4596 (nível 4) «identificador»: nome qualificado ilegal na declaração de membro 14.3Perm
C4598 (nível 1 e nível 3) '#include "header"': o número do cabeçalho no cabeçalho pré-compilado não corresponde à compilação atual nessa posição 14.3
C4599 (nível 3) 'caminhoda opção': o número do argumento da linha de comando arg_number não corresponde ao cabeçalho pré-compilado 14.3
C4605 (nível 1) '/Dmacro' especificada na linha de comando atual, mas não foi especificada quando o cabeçalho pré-compilado foi criado
C4608 (nível 3) 'union_member' já foi inicializado por outro membro do sindicato na lista de inicializadores, 'union_member' Perm
C4619 (nível 3) #pragma aviso: não existe um número de aviso «número»
C4623 (nível 4) 'Classe derivada': o construtor padrão não pôde ser gerado porque um construtor padrão de classe base está inacessível
C4625 (nível 4) 'Classe derivada': o construtor Copy não pôde ser gerado porque um construtor de cópia de classe base está inacessível
C4626 (nível 4) 'Classe derivada': operador de atribuição não pôde ser gerado porque um operador de atribuição de classe base está inacessível
C4628 (nível 1) dígrafos não suportados com -Ze. Sequência de caracteres «dígrafo» não interpretada como símbolo alternativo para «char»
C4640 (nível 3) 'instância': a construção de objeto estático local não é thread-safe
C4643 (nível 4) A declaração direta de 'identificador' no namespace std não é permitida pelo padrão C++. 15.8
C4647 (nível 3) Mudança de comportamento: __is_pod(Type) tem valor diferente em versões anteriores
C4654 (nível 4) O código colocado antes da inclusão da linha de cabeçalho pré-compilada será ignorado. Adicione código ao cabeçalho pré-compilado. 14.1
C4668 (nível 4) 'símbolo' não é definido como uma macro de pré-processador, substituindo por '0' para 'diretivas'
C4682 (nível 4) 'symbol' : nenhum atributo de parâmetro direcional especificado, padrão para [in]
C4686 (nível 3) 'tipo definido pelo utilizador': possível alteração no comportamento, alteração na convenção de chamada de retorno UDT
C4692 (nível 1) 'Função': A assinatura de um membro não privado contém o tipo nativo privado da assembleia 'native_type'
C4710 (nível 4) «Função»: função não embutida
C4738 (nível 3) armazenar float de 32 bits resulta em memória, possível perda de desempenho
C4746 o acesso volátil de 'expressão' está sujeito à configuração /volatile:<iso|ms; considere o uso de funções intrínsecas> __iso_volatile_load/store
C4749 (nível 4) Suporte condicional: deslocamento aplicado ao tipo de layout não padrão 'tipo'
C4767 (nível 4) nome da seção 'símbolo' tem mais de 8 caracteres e será truncado pelo vinculador
C4774 (nível 4) 'string' : a string de formato esperada no número do argumento não é uma string literal
C4777 (nível 4) 'function' : format string 'string' requer um argumento do tipo 'type1', mas o número do argumento variádico tem o tipo 'type2'
C4786 (nível 3) 'símbolo': o nome do objeto foi truncado para caracteres 'número' nas informações de depuração
C4800 (nível 4) Conversão implícita de 'tipo' para bool. Possível perda de informação 16.0
C4820 (nível 4) preenchimento de bytes de 'bytes' adicionado após a construção 'member_name'
C4822 (nível 1) «Membro»: a função de membro da classe local não tem um corpo
C4826 (nível 2) A conversão de 'tipo1' para 'tipo2' é estendida por sinal. Isso pode causar um comportamento de tempo de execução inesperado.
C4837 (nível 4) Trigrafo detetado: «??personagem» em vez de «caráter»
C4841 (nível 4) Extensão não-padrão usada: Designador de membro composto usado em offsetof
C4842 (nível 4) O resultado de 'offsetof' aplicado a um tipo usando herança múltipla não é garantido para ser consistente entre as versões do compilador
C4866 (nível 4) O compilador 'file(line-number)' não pode impor ordem de avaliação da esquerda para a direita para chamar o operador
C4868 (nível 4) O compilador 'file(line_number)' não pode impor a ordem de avaliação da esquerda para a direita na lista de inicialização em braced
C4905 (nível 1) Literal de cadeia larga para 'LPSTR'
C4906 (nível 1) string literal cast para 'LPWSTR'
C4917 (nível 1) 'declarador': um GUID só pode ser associado a uma classe, interface ou namespace
C4928 (nível 1) inicialização ilegal de cópias; mais de uma conversão definida pelo usuário foi implicitamente aplicada
C4931 (nível 4) Estamos assumindo que a biblioteca de tipos foi criada para ponteiros de bits numéricos
C4946 (nível 1) reinterpret_cast utilizados entre classes relacionadas: «classe1» e «classe2»
C4962 'função': otimizações guiadas por perfil desativadas porque as otimizações fizeram com que os dados de perfil se tornassem inconsistentes
C4986 (nível 4) «Símbolo»: a especificação da exceção não corresponde à declaração anterior
C4987 (nível 4) extensão não normalizada utilizada: «lançar (...)»
C4988 (nível 4) «Símbolo»: variável declarada fora do âmbito da classe/função
C5022 'type': construtores de movimento múltiplo especificados
C5023 'tipo': operadores de atribuição de múltiplos movimentos especificados
C5024 (nível 4) 'type': o construtor move foi implicitamente definido como excluído
C5025 (nível 4) 'tipo': operador de atribuição de movimento foi implicitamente definido como excluído
C5026 (nível 1 e nível 4) 'type': o construtor move foi implicitamente definido como excluído
C5027 (nível 1 e nível 4) 'tipo': operador de atribuição de movimento foi implicitamente definido como excluído
C5029 (nível 4) extensão não padrão usada: atributos de alinhamento em C++ aplicam-se apenas a variáveis, membros de dados e tipos de tag
C5031 (nível 4) #pragma aviso(pop): provável incompatibilidade, estado de aviso de popping enviado em arquivo diferente 14.1
C5032 (nível 4) detetado #pragma aviso (push) sem correspondente #pragma warning(pop) 14.1

Visual Studio 2017 e versões posteriores

Os seguintes avisos são desativados por padrão no Visual Studio 2017 e versões posteriores:

Advertência Mensagem
C5034 O uso de intrínseco 'intrínseco' faz com que o nome da função seja compilado como código de convidado 15.3
C5035 O uso do recurso 'recurso' faz com que o nome da função seja compilado como código de convidado 15.3
C5036 (nível 1) varargs função ponteiro conversão ao compilar com /hybrid:x86arm64 'type1' para 'type2' 15.3
C5038 (nível 4) Data Member 'Member1' será inicializado após Data Member 'Member2' 15.3
C5039 (nível 4) «Função»: ponteiro ou referência a uma função potencialmente de lançamento passada para a função C externa em -EHc. Comportamento indefinido pode ocorrer se essa função lança uma exceção. 15.5
C5041 (nível 4) 'member-name': a definição fora de linha para o membro de dados estáticos constexpr não é necessária e foi preterida no C++17. 15.2
C5042 (nível 3) «função»: as declarações de função no âmbito do bloco não podem ser especificadas «em linha» no padrão C++; remover especificador 'inline' 15.5
C5045 O compilador inserirá a mitigação do Spectre para carga de memória se o switch /Qspectre especificado 15.7

Visual Studio 2019 e versões posteriores

Os seguintes avisos são desativados por padrão no Visual Studio 2019 e versões posteriores:

Advertência Mensagem
C5052 (nível 3) A palavra-chave 'keyword-name' foi introduzida na versão C++ e requer o uso da opção de linha de comando 'option' 16.1
C5204 (nível 3) Uma classe com funções virtuais tem um destruidor trivial não virtual. 16.5
C5214 (nível 4) aplicar 'palavra-chave' a um operando com um tipo qualificado volátil foi preterido em C++20 16.7
C5215 (nível 4) 'function-parameter' um parâmetro de função com um tipo qualificado volátil foi preterido em C++20 16.7
C5216 (nível 4) 'return-type' um tipo de retorno qualificado volátil foi preterido em C++20 16.7
C5217 (nível 4) uma declaração de vinculação estruturada que inclui volátil foi preterida no C++20 16.7
C5219 (nível 2) conversão implícita de «tipo-1» para «tipo-2», possível perda de dados 16,7
C5220 (nível 4) «Membro»: um membro de dados não estáticos com um tipo qualificado volátil já não implica que
construtores copy/move gerados pelo compilador e operadores de atribuição copy/move não são triviais 16.7
C5233 (nível 4) O 'identificador' explícito da captura do Lambda não é usado 16.10
C5240 (nível 4) 'attribute-name': atributo é ignorado nesta posição sintática 16.10
C5243 (nível 1) 'type-name': usar a classe incompleta 'class-name' pode causar uma potencial violação de uma regra de definição devido à limitação ABI 16.10
C5245 (nível 4) 'função': função não referenciada com ligação interna foi removida
C5246 (nível 1) 'membro': a inicialização de um subobjeto deve ser encapsulada em chaves 16.10
C5247 (nível 1) A seção 'section-name' é reservada para inicialização dinâmica C++. A criação manual da seção interferirá na inicialização dinâmica do C++ e poderá levar a um comportamento indefinido 16.11
C5248 (nível 1) A seção 'section-name' é reservada para inicialização dinâmica C++. A variável colocada manualmente na seção pode ser otimizada e sua ordem em relação aos inicializadores dinâmicos gerados pelo compilador não é especificada 16.11

Visual Studio 2022 e versões posteriores

Os seguintes avisos são desativados por padrão no Visual Studio 2022 e versões posteriores:

Advertência Mensagem
C5249 (nível 1) 'bitfield' do tipo 'enumeration_name' tem enumeradores nomeados com valores que não podem ser representados na largura de campo de bits de 'bitfield_width'. 17.0
C5250 (nível 3) 'function_name': função intrínseca não declarada. 17.0
C5251 (nível 4) nome do segmento alterado após a inclusão do cabeçalho 17.1
C5254 (nível 4) O recurso de linguagem 'terse static assert' requer o sinalizador do compilador '/std:c++17' 17.1
C5256 (nível 1) «Enumeração»: uma declaração não definidora de uma enumeração com um tipo subjacente fixo só é permitida como declaração autónoma 17.2
C5258 (nível 4) a captura explícita de «símbolo» não é necessária para esta utilização 17.2
C5259 (nível 4) 'tipo especializado': especialização explícita requer 'template <>' 17.3
C5262 (nível 1, erro) A passagem implícita ocorre aqui; falta uma declaração break? Utilizar [[fallthrough]] quando uma declaração é intencionalmente omitida entre os break casos 17.4
C5263 (nível 4) Chamar 'std::move' em um objeto temporário impede a elisão de cópia 17.4
C5264 (nível 4) 'variable-name': a variável 'const' não é utilizada 17.4
C5266 (nível 4) O qualificador 'const' no tipo de retorno não tem efeito 17.6
C5267 (nível 4) A definição de construtor/operador de atribuição de cópia implícita para 'type' foi preterida porque tem um operador de atribuição fornecido pelo usuário/construtor de cópia 17.7

14.1 Este aviso está disponível a partir da Atualização 1 do Visual Studio 2015.
14.3 Este aviso está disponível a partir da Atualização 3 do Visual Studio 2015.
15.2 Este aviso está disponível a partir do Visual Studio 2017 versão 15.2.
15.3 Este aviso está disponível a partir do Visual Studio 2017 versão 15.3.
15.5 Este aviso está disponível a partir do Visual Studio 2017 versão 15.5.
15.7 Este aviso está disponível a partir do Visual Studio 2017 versão 15.7.
15.8 Este aviso está disponível a partir do Visual Studio 2017 versão 15.8.
16.0 Este aviso está disponível a partir do Visual Studio 2019 RTM.
16.5 Este aviso está disponível a partir do Visual Studio 2019 versão 16.5.
16.7 Este aviso está disponível a partir do Visual Studio 2019 versão 16.7.
16.10 Este aviso está disponível a partir do Visual Studio 2019 versão 16.10.
16.11 Este aviso está disponível a partir do Visual Studio 2019 versão 16.11.
17.0 Este aviso está disponível a partir do Visual Studio 2022 versão 17.0.
17.1 Este aviso está disponível a partir do Visual Studio 2022 versão 17.1.
17.2 Este aviso está disponível a partir do Visual Studio 2022 versão 17.2.
17.3 Este aviso está disponível a partir do Visual Studio 2022 versão 17.3.
17.4 Este aviso está disponível a partir do Visual Studio 2022 versão 17.4.
17.5 Este aviso está disponível a partir do Visual Studio 2022 versão 17.5.
17.6 Este aviso está disponível a partir do Visual Studio 2022 versão 17.6.
17.7 Este aviso está disponível a partir do Visual Studio 2022 versão 17.7.
Perm Este aviso está desativado, a menos que a opção do /permissive- compilador esteja definida.

Avisos desativados por padrão em versões anteriores

Esse aviso foi desativado por padrão no Visual Studio 2015 versão 15.3 e habilitado no Visual Studio 2015 versão 15.5:

Advertência Mensagem
C4768 __declspec atributos antes da especificação de ligação são ignorados

Esses avisos estavam desativados por padrão em versões do compilador anteriores ao Visual Studio 2015:

Advertência Mensagem
C4302 (nível 2) 'conversão': truncamento de 'tipo1' para 'tipo2'
C4311 (nível 1) 'variável': truncamento do ponteiro de 'tipo' para 'tipo'
C4312 (nível 1) «Operação»: conversão de «tipo1» para «tipo2» de maior dimensão
C4319 (nível 1) «Operador»: zero que alarga o «tipo1» ao «tipo2» de maior dimensão

Este aviso estava desativado por padrão em versões do compilador antes do Visual Studio 2012:

Advertência Mensagem
C4431 (nível 4) especificador de tipo ausente - será assumido como int. Nota: C não suporta mais default-int

Ver também

warning Pragma