Aviso C4341 - 'XX':o valor assinado está fora do intervalo para constante enum
-
09-06-2019 - |
Pergunta
Ao compilar meu aplicativo C++ .Net, recebo 104 avisos do tipo:
Warning C4341 - 'XX': signed value is out of range for enum constant
Onde XX pode estar
- WCHAR
- LONGO
- PEDAÇO
- BINÁRIO
- GUIA
- ...
Não consigo remover esses avisos, faça o que fizer.Quando clico duas vezes neles, sou levado a uma parte do meu código que usa OdbcParameters - quando tento um projeto de teste com todo o resto das minhas coisas, mas sem OdbcParameters, ele não fornece avisos.
Alguma ideia de como posso me livrar desses avisos?Eles estão fazendo avisos reais a partir de códigos que escrevi com dificuldade de ver - e me dá uma sensação horrível saber que meu aplicativo tem 104 avisos!
Solução
Isto é um bug do compilador.Aqui está outra postagem confirmando que é um problema conhecido.Eu tenho o mesmo problema em um dos meus projetos e não há como evitar que ele seja acionado, a menos que você evite o uso de OdbcParameter.A maneira mais conservadora de suprimir apenas os avisos de bugs é usar
#pragma warning( push )
#pragma warning( disable: 4341 )
// code affected by bug
#pragma warning( pop )
Outras dicas
No Visual Studio você sempre pode desabilitar avisos específicos acessando:
Configurações do projeto -> C/C++ -> Avançado -> Desativar avisos específicos:4341
Espere por uma correção do compilador ou não #include
código que o aciona.
[Uma maneira detalhada de dizer que você provavelmente não consegue.]