Avertissement C4341 - 'XX' :la valeur signée est hors plage pour la constante enum
-
09-06-2019 - |
Question
Lors de la compilation de mon application C++ .Net, j'obtiens 104 avertissements du type :
Warning C4341 - 'XX': signed value is out of range for enum constant
Où XX peut être
- WCHAR
- LONG
- PEU
- BINAIRE
- GUID
- ...
Je n'arrive pas à supprimer ces avertissements quoi que je fasse.Lorsque je double-clique dessus, cela m'amène à une partie de mon code qui utilise OdbcParameters - quand j'essaie un projet de test avec tout le reste de mes affaires mais pas de OdbcParameters, il ne donne pas d'avertissements.
Avez-vous une idée de comment supprimer ces avertissements ?Ils émettent de véritables avertissements à partir d'un code que j'ai écrit de manière difficile à voir - et cela me donne un sentiment horrible de savoir que mon application contient 104 avertissements !
La solution
C'est un bug du compilateur.Voici un autre message confirmant qu'il s'agit d'un problème connu.J'ai le même problème dans l'un de mes projets et il n'y a aucun moyen de l'empêcher d'être déclenché à moins que vous n'ayez un moyen d'éviter l'utilisation de OdbcParameter.La manière la plus conservatrice de supprimer uniquement les avertissements de bogues est d'utiliser
#pragma warning( push )
#pragma warning( disable: 4341 )
// code affected by bug
#pragma warning( pop )
Autres conseils
Dans Visual Studio, vous pouvez toujours désactiver des avertissements spécifiques en accédant à :
Paramètres du projet -> C/C++ -> Avancé -> Désactiver les avertissements spécifiques :4341
Soit attendez un correctif du compilateur, soit ne le faites pas #include
code qui le déclenche.
[Une façon verbeuse de dire que vous ne pouvez probablement pas.]