Je démarre un nouveau projet BREW, et j'aimerais compiler avec Warning Level 4 (/ W4) pour garder le code d'application Nice et propre. Le problème est que les en-têtes BREW eux-mêmes ne se compilent pas correctement avec/W4.
Dans gcc, vous pouvez faire la différence entre les en-têtes d'application et les en-têtes 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 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 sélectivement et temporairement désactiver tous les avertissements comme celui-ci:
#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 )
L'équipe Visual C++ vient d'ajouter la prise en charge des niveaux d'avertissement dans les en-têtes externes. Vous pouvez trouver les détails dans leur article de blog: Théorie des avertissements brisés .
En substance, il fait automatiquement ce que les suggestions recommandaient ici de faire manuellement: pousse le nouveau niveau d'avertissement juste avant la directive #include et le fait apparaître juste après. Il existe des indicateurs supplémentaires pour spécifier les emplacements des en-têtes externes, un indicateur pour traiter tous les <> comme externes, #pragma system_header et une fonctionnalité non disponible dans Clang ou GCC (au moment d'écrire ces lignes) 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 des discussions utiles dans ne annonce reddit pour ce post .
Je ne pense pas que Visual C++ vous permette de vous différencier. Vous pouvez le simuler en utilisant #pragma warning
autour de l'inclusion:
#pragma warning(Push, 0)
#include "mywarningheader.h"
#pragma warning(pop)