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

Je commence un nouveau projet BREW, et je voudrais compiler avec le niveau D'avertissement 4 (/W4) pour garder le code de l'application agréable et propre. Le problème est que les en-têtes BREW eux-mêmes ne compilent pas proprement avec /W4.

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

45
demandé sur Prof. Falken 2010-03-30 03:43:11

3 réponses

Utiliser 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, donc quelque chose comme:

#pragma warning( push )
#pragma warning( disable : 4081)
#pragma warning( disable : 4706 )
// Some code
#pragma warning( pop ) 
73
répondu Brian R. Bondy 2010-03-29 23:45:47

L'équipe Visual C++ vient d'ajouter le support des niveaux d'avertissement dans les en-têtes externes. Vous pouvez trouver les détails dans leur billet de blog: Théorie des avertissements brisés .

En substance, il fait automatiquement ce que les suggestions ici recommandaient de faire manuellement: pousse le nouveau niveau d'avertissement juste avant la directive # include et l'affiche juste après. Il y a des drapeaux supplémentaires pour spécifier les emplacements des en-têtes externes, drapeau pour traiter toutes les includes comme externes, #pragma system_header et un fonctionnalité non disponible dans Clang ou GCC (à ce jour) pour voir les avertissements dans les en-têtes externes à travers la pile d'instanciation de modèle lorsque le modèle a été instancié dans le code utilisateur.

Outre les commentaires sous ce post, vous pouvez également trouver une discussion utile dans une annonce reddit pour ce post .

5
répondu solodon 2017-12-22 01:26:49

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

#pragma warning(push, 0)
#include "mywarningheader.h"
#pragma warning(pop)
4
répondu Dan Story 2010-03-29 23:51:26