Avisos de compilador desativados por padrão
O compilador inclui avisos que são desativados por padrão, pois a maioria dos desenvolvedores não deseja vê-los. Em alguns casos, eles alertam sobre uma escolha estilística ou sobre idiomas comuns em código mais antigo. Outros avisos são sobre o uso de uma extensão da Microsoft para a linguagem. Alguns avisos indicam uma área em que os programadores geralmente fazem suposições incorretas, o que pode levar a um comportamento inesperado ou indefinido. Se todos esses avisos estiverem habilitados, alguns deles poderão aparecer muitas vezes em cabeçalhos de biblioteca. As bibliotecas de runtime C e as bibliotecas padrão C++ destinam-se a não emitir avisos somente no nível de aviso /W4
.
Habilitar 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) é habilitado no nível padrão. A documentação para o aviso contém o nível padrão do aviso.
#pragma warning(
:
warning_level warning_number)
O aviso especificado (warning_number) é habilitado no nível especificado (warning_level).
-
/Wall
habilita todos os avisos que são desativados por padrão. Se você usar essa opção, poderá desativar avisos individuais usando a opção/wd
. -
Essa opção habilita o aviso 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:
Aviso | Mensagem |
---|---|
C4061 (nível 4) | enumerador 'identificador' em uma opção de enumeração 'enumeração' não é tratado explicitamente por um rótulo de caso. |
C4062 (nível 4) | enumerator 'identifier' em uma opção de enumeração 'enumeration' não é tratado. |
C4165 (nível 1) | 'HRESULT' está sendo convertido para 'bool'; você tem certeza de que quer isso? |
C4191 (nível 3) | 'operator': conversão não segura de 'type_of_expression' para 'type_required' |
C4242 (nível 4) | 'identifier': conversão de 'type1' para 'type2', possível perda de dados |
C4254 (nível 4) | 'operator': conversão de 'type1' para 'type2', possível perda de dados |
C4255 (nível 4) | 'function': nenhum protótipo de função fornecido: convertendo '()' em '(void)' |
C4263 (nível 4) | 'function': a função membro não substitui nenhuma função membro virtual da classe base |
C4264 (nível 1) | 'virtual_function': nenhuma substituição disponível para função membro virtual da 'class' base; a função é ocultada |
C4265 (nível 3) | 'class': a classe tem funções virtuais, mas o destruidor não é virtual |
C4266 (nível 4) | 'function': nenhuma substituição disponível para função membro virtual do 'type' base; a função é ocultada |
C4287 (nível 3) | 'operator': incompatibilidade de constante sem sinal/negativa |
C4289 (nível 4) | extensão não padrão usada: 'var': variável de controle de loop declarada no loop for é usada fora do escopo do loop for |
C4296 (nível 4) | 'operator': a expressão sempre é falsa |
C4339 (nível 4) | 'type': uso de tipo indefinido detectado no metadados do CLR – usar esse tipo pode gerar uma exceção de tempo de execução |
C4342 (nível 1) | alteração de comportamento: 'function' é chamado, mas um operador de membro foi chamado em versões anteriores |
C4350 (nível 1) | alteração de comportamento: 'member1' chamado no lugar de 'member2' |
C4355 | 'this' : usado na lista de inicializadores do membro base |
C4365 (nível 4) | 'action' : conversão de 'type_1' para 'type_2', incompatibilidade assinada/não assinada |
C4370 (nível 3) | layout da classe foi alterado de uma versão anterior do compilador devido a empacotamento melhor |
C4371 (nível 3) | 'class-name': o layout da classe pode ter sido alterado em relação a uma versão anterior do compilador devido ao melhor empacotamento do membro 'member' |
C4388 (nível 4) | incompatibilidade de signed/unsigned |
C4412 (nível 2) | 'function': a assinatura de função contém o tipo 'type'; não é seguro passar objetos C++ entre código puro e combinado ou nativo |
C4426 (level 1) | os sinalizadores de otimização foram alterados após incluir o cabeçalho, pode ser devido ao #pragma optimize() 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) | O nível superior '__unaligned' não é implementado neste contexto. |
C4464 (nível 4) | o caminho de inclusão relativo contém '..' |
C4471 (nível 4) | uma declaração de encaminhamento 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) | 'function': a função embutida desreferenciada foi removida |
C4536 (nível 4) | 'type name': o nome de tipo excede o limite de metadados de 'limit' caracteres |
C4545 (nível 1) | expressão antes da vírgula é avaliada para uma função que está ausente em uma lista de argumentos |
C4546 (nível 1) | faltando lista de argumentos na chamada de função antes da vírgula |
C4547 (nível 1) | 'operator': o operador antes da vírgula não tem efeito; um operador com efeito colateral era esperado |
C4548 (nível 1) | expressão antes da vírgula não tem efeito; expressão esperada com efeito colateral |
C4549 (nível 1) | 'operator1': o operador antes da vírgula não tem efeito; você quis dizer 'operator2'? |
C4555 (nível 1) | expressão não tem efeito; expressão esperada com efeito colateral |
C4557 (nível 3) | '__assume' contém o efeito 'effect' |
C4571 (nível 4) | Informativo: a semântica catch(...) foi alterada desde o Visual C++ 7.1; exceções estruturadas (SEH) não são mais capturadas |
C4574 (level 4) | 'identifier' é definido para ser '0': você quis usar '#if identifier'? |
C4577 (nível 1) | 'noexcept ' usado sem modo de tratamento de exceção especificado; o encerramento em caso de exceção não é garantido. Especifique /EHsc |
C4582 (nível 4) | 'type': o construtor não foi chamado implicitamente |
C4583 (nível 4) | 'type': o destruidor não foi chamado implicitamente |
C4587 (level 1) | 'anonymous_structure': alteração de comportamento: o construtor não é mais chamado implicitamente |
C4588 (nível 1) | 'anonymous_structure': alteração de comportamento: o destruidor não é mais chamado implicitamente |
C4596 (nível 4) | 'identificador': nome qualificado ilegal na declaração do membro 14.3 Perm |
C4598 (nível 1 e nível 3) | '#include "header"': o número do cabeçalho header-number no cabeçalho pré-compilado não corresponde à compilação atual nessa posição 14.3 |
C4599 (nível 3) | 'caminho da opção': o número do argumento de linha de comando arg_number não corresponde ao cabeçalho pré-compilado 14.3 |
C4605 (level 1) | '/Dmacro' especificado na linha de comando atual, porém não foi especificado quando o cabeçalho pré-compilado foi criado |
C4608 (nível 3) | 'union_member' já foi inicializado por outro membro de união na lista de inicializadores, 'union_member' Perm |
C4619 (nível 3) | aviso #pragma: não há número de aviso 'number' |
C4623 (nível 4) | 'derived class': construtor padrão não pôde ser gerado porque o construtor padrão de uma classe base está inacessível |
C4625 (nível 4) | 'derived class': construtor de cópia não pôde ser gerado porque o construtor de cópia de uma classe base está inacessível |
C4626 (nível 4) | 'derived class': operador de atribuição não pôde ser gerado porque o operador de atribuição de uma classe base está inacessível |
C4628 (nível 1) | dígrafos não suportados com -Ze. A sequência de caracteres 'digraph' não é interpretada como token alternativo para 'char' |
C4640 (nível 3) | 'instance': construção de objeto estático local não é thread-safe |
C4643 (nível 4) | Encaminhar a declaração de 'identifier' no namespace std não é permitido pelo padrão C++. 15.8 |
C4647 (nível 3) | mudança de comportamento: __is_pod(type) tem um valor diferente em versões anteriores |
C4654 (nível 4) | O código colocado antes da inclusão da linha de cabeçalho pré-compilado será ignorado. Adicionar código ao cabeçalho pré-compilado. 14.1 |
C4668 (nível 4) | 'symbol' não é definido como uma macro de pré-processador, substituindo por '0' para 'directives' |
C4682 (nível 4) | 'symbol' : nenhum atributo de parâmetro direcional especificado, padronizando para [in] |
C4686 (nível 3) | 'user-defined type': possível alteração no comportamento, alteração na convenção de chamada de retorno UDT |
C4692 (nível 1) | 'function': assinatura de membro não privado contém tipo nativo privado de assembly 'native_type' |
'C4710 (nível 4) | ''function': função não embutida |
C4738 (nível 3) | armazenando o resultado float de 32 bits na memória, possível perda de desempenho |
C4746 | acesso volátil de 'expression' está sujeito à configuração /volatile:<iso|ms>; considere usar funções intrínsecas do __iso_volatile_load/store |
C4749 (nível 4) | com suporte condicional: offsetof aplicado ao tipo de layout não padrão 'type' |
C4767 (nível 4) | nome da seção 'symbol' tem mais de 8 caracteres e será truncado pelo vinculador |
C4774 (nível 4) | 'string': a cadeia de caracteres de formato esperado no argumento number não é um literal de cadeia de caracteres |
C4777 (nível 4) | 'function': a cadeia de caracteres de formato 'string' exige um argumento do tipo 'type1', mas o argumento variádico number tem o tipo 'type2' |
C4786 (nível 3) | 'symbol' : o nome do objeto foi truncado para caracteres 'number' nas informações de depuração |
C4800 (nível 4) | Conversão implícita de 'type' em bool. Possível perda de informações 16.0 |
C4820 (nível 4) | preenchimento de bytes 'bytes' adicionado após construção de 'member_name' |
C4822 (nível 1) | 'member': a função membro da classe local não tem um corpo |
C4826 (nível 2) | A conversão de 'type1' em 'type2' é estendida por sinal. Isso pode causar comportamento de tempo de execução inesperado. |
C4837 (nível 4) | trígrafo detectado: '?? character' substituído por 'character' |
C4841 (nível 4) | extensão não padrão usada: designador de membro composto usado em offsetof |
C4842 (nível 4) | não é garantido que o resultado de 'offsetof' aplicado a um tipo usando a herança múltipla seja consistente entre versões do compilador |
C4866 (nível 4) | O compilador 'file(line_number)' pode não impor a ordem de avaliação da esquerda para a direita para chamar para o operator |
C4868 (nível 4) | O compilador 'file(line_number)' pode não impor a ordem de avaliação da esquerda para a direita na lista de inicializadores entre chaves |
C4905 (nível 1) | literal amplo de cadeia de caracteres convertido em 'LPSTR' |
C4906 (nível 1) | literal de cadeia de caracteres convertido em 'LPWSTR' |
C4917 (nível 1) | 'declarator': um GUID pode ser associado apenas a uma classe, uma interface ou um namespace |
C4928 (nível 1) | inicialização de cópia ilegal; mais de uma conversão definida pelo usuário foi implicitamente aplicada |
C4931 (nível 4) | estamos supondo que a biblioteca de tipos foi criada para ponteiros de bit por número |
C4946 (nível 1) | reinterpret_cast usado entre classes relacionadas: 'class1' e 'class2' |
C4962 | 'function': otimizações guiadas por perfil desabilitadas porque as otimizações tornaram os dados de perfil inconsistentes |
C4986 (nível 4) | 'symbol': especificação de exceção não corresponde à declaração anterior |
C4987 (nível 4) | extensão não padrão usada: 'throw (...)' |
C4988 (nível 4) | 'symbol': variável declarada fora do escopo de classe/função |
C5022 | 'type': vários construtores de movimento especificados |
C5023 | 'type': vários operadores de atribuição de movimento especificados |
C5024 (nível 4) | 'type': o construtor de movimento foi implicitamente definido como excluído |
C5025 (nível 4) | 'type': o operador de atribuição de movimento foi implicitamente definido como excluído |
C5026 (nível 1 e nível 4) | 'type': o construtor de movimento foi implicitamente definido como excluído |
C5027 (nível 1 e nível 4) | 'type': o operador de atribuição de movimento foi implicitamente definido como excluído |
C5029 (nível 4) | extensão não padrão usada: os atributos de alinhamento no C++ se aplicam somente a variáveis, membros de dados e tipos de marcas |
C5031 (nível 4) | #pragma warning(pop): provável incompatibilidade, estado de aviso mostrado enviado por push em um arquivo diferente 14.1 |
C5032 (nível 4) | #pragma warning(push) detectado sem nenhum #pragma warning(pop) correspondente 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:
Aviso | Mensagem |
---|---|
C5034 | uso da intrínseca 'intrinsic' faz com que a função function-name seja compilada como código de convidado 15.3 |
C5035 | o uso do recurso 'feature' faz com que a função function-name seja compilada como um código de convidado 15.3 |
C5036 (nível 1) | conversão do ponteiro da função varargs ao compilar com /hybrid:x86arm64 'type1' para 'type2' 15.3 |
C5038 (nível 4) | o membro de dados 'member1' será inicializado após o membro de dados 'member2' 15.3 |
C5039 (nível 4) | 'function': ponteiro ou referência a função potencialmente lançada passada para a função C externa em -EHc . O comportamento indefinido poderá ocorrer se essa função lançar uma exceção. 15.5 |
C5041 (nível 4) | 'member-name': a definição fora de linha para o membro de dados estáticos de constexpr não é necessária está preterida no C++17. 15.2 |
C5042 (nível 3) | 'function': declarações de função em um escopo de bloco não podem ser especificadas como "embutidas" em C++ padrão; remova o especificador "embutido" 15.5 |
C5045 | O compilador inserirá a mitigação Spectre para a carga de memória se a opção /Qspectre for especificada 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:
Aviso | 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) | a aplicação de 'keyword' 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 no C++20 16.7 |
C5217 (nível 4) | uma declaração de associação estruturada que inclui volátil foi preterida em C++20 16.7 |
C5219 (nível 2) | conversão implícita de 'type-1' para 'type-2'. Possível perda de dados 16.7 |
C5220 (nível 4) | 'member': um membro de dados não estático com um tipo qualificado volátil não implica mais que Construtores de cópia/movimentação gerados pelo compilador e operadores de atribuição de cópia/movimentação não são triviais 16.7 |
C5233 (nível 4) | a captura de lambda explícita 'identifier' não é usada 16.10 |
C5240 (nível 4) | 'attribute-name': o atributo foi ignorado nesta posição sintática 16.10 |
C5243 (nível 1) | 'type-name': usar uma classe 'class-name' incompleta pode causar uma possível violação da regra de definição devido à limitação de ABI 16.10 |
C5245 (nível 4) | 'function': a função não referenciada com vinculação interna foi removida |
C5246 (nível 1) | 'member': a inicialização de um subobjeto deve ser colocada entre chaves 16.10 |
C5247 (level 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 pode levar a um comportamento indefinido 16.11 |
C5248 (nível 1) | A seção 'section-name' é reservada para inicialização dinâmica C++. As variáveis colocadas manualmente na seção podem ser otimizadas 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:
Aviso | Mensagem |
---|---|
C5249 (nível 1) | 'bitfield' do tipo 'enumeration_name' nomeou enumeradores com valores que não podem ser representados na largura de campo de bit fornecida 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 incluir 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 uma declaração autônoma 17.2 |
C5258 (nível 4) | A captura explícita de 'símbolo' não é necessária para esse uso 17.2 |
C5259 (nível 4) | 'specialized-type': a especialização explícita requer 'template <> ' 17.3 |
C5262 (nível 1, erro) | aqui ocorre um fall-through implícito; você está perdendo uma declaração break ? Uso [[fallthrough]] quando uma break instrução é intencionalmente omitida entre os 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) | 'nome-da-variável': a variável 'const' não é usada 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 de cópia/operador de atribuição implícito para 'tipo' foi preterida porque tem um operador de atribuição/construtor de cópia fornecido pelo usuário 17.7 |
14.1 Este aviso está disponível a partir do Visual Studio 2015 Atualização 1.
14.3 Este aviso está disponível a partir do Visual Studio 2015 Atualização 3.
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 Esse aviso está disponível a partir do Visual Studio 2022 versão 17.4.
17.5 Esse aviso está disponível a partir do Visual Studio 2022 versão 17.5.
17.6 Esse aviso está disponível a partir do Visual Studio 2022 versão 17.6.
17.7 Esse aviso está disponível a partir do Visual Studio 2022 versão 17.7.
Permanente Esse aviso está desativado, a menos que a opção do compilador /permissive-
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:
Aviso | Mensagem |
---|---|
C4768 | os atributos __declspec antes da especificação de vínculo são ignorados |
Esses avisos foram desativados por padrão em versões do compilador antes do Visual Studio 2015:
Aviso | Mensagem |
---|---|
C4302 (nível 2) | 'conversion': truncamento de 'type1' para 'type2' |
C4311 (nível 1) | 'variable': truncamento de ponteiro de type' para 'type' |
C4312 (nível 1) | 'operation': conversão de 'type1' em 'type2' de tamanho maior |
C4319 (nível 1) | 'operator' : zero estendendo 'type1' para 'type2' de maior tamanho |
Esses avisos foram desativados por padrão em versões do compilador antes do Visual Studio 2012:
Aviso | Mensagem |
---|---|
C4431 (nível 4) | faltando especificador de tipo - int assumido. Observação: C não suporta mais default-int |