Comment supprimer les avertissements dans les en-têtes externes dans Visual C ++

Je commence un nouveau projet BREW et j’aimerais comstackr avec Warning Level 4 (/ W4) pour garder le code de l’application propre et correct. Le problème est que les en-têtes BREW eux-mêmes ne comstacknt pas proprement avec / W4.

Dans gcc, vous pouvez différencier les en-têtes d’application et de système en utilisant -I et -isystem. Par défaut, gcc ne signale aucun avertissement de compilation dans les en-têtes du système. Existe-t-il un mécanisme équivalent dans Visual C ++?

Utilisez cette méthode uniquement autour d’un bloc d’en-têtes que vous ne pouvez pas modifier, mais que vous devez inclure.

Vous pouvez désactiver sélectivement et temporairement tous les avertissements comme ceci:

#pragma warning(push, 0) //Some includes with unfixable warnings #pragma warning(pop) 

Au lieu de 0, vous pouvez éventuellement passer le numéro d’avertissement à désactiver, de sorte que quelque chose comme:

 #pragma warning( push ) #pragma warning( disable : 4081) #pragma warning( disable : 4706 ) // Some code #pragma warning( pop ) 

L’équipe Visual C ++ vient d’append la prise en charge des niveaux d’avertissement dans les en-têtes externes. Vous pouvez trouver les détails sur leur blog: Théorie des avertissements brisés .

Essentiellement, il fait automatiquement ce que les suggestions ici recommandaient de faire manuellement: pousse le nouveau niveau d’avertissement juste avant la directive #include et le fait apparaître immédiatement après. Il existe des drapeaux supplémentaires pour spécifier les emplacements des en-têtes externes, un indicateur pour traiter tous les éléments <> comme externe, #pragma system_header et une fonctionnalité non disponible dans Clang ou GCC pour afficher les avertissements dans les en-têtes de modèle lorsque le modèle a été instancié dans le code utilisateur.

Outre les commentaires sous cet article, vous pouvez également trouver une discussion utile dans une annonce de reddit pour cet article .

Je ne crois pas que Visual C ++ vous permet de différencier. Vous pouvez le faire en utilisant #pragma warning autour de l’inclusion:

 #pragma warning(push, 0) #include "mywarningheader.h" #pragma warning(pop)