Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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).
-
/WallHabilita todos os avisos que estão desativados por padrão. Se você usar essa opção, poderá desativar avisos individuais usando a/wdopção. -
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 |