2009-02-08 6 views
29

J'ai démarré un nouveau projet et j'ai décidé de m'assurer qu'il se construit proprement avec l'option/Wall activée. Le seul problème est pas toutes les bibliothèques 3ème partie (comme coup de pouce) compiler sans avertissement préalable, donc je l'ai eu recours à le faire dans un en-tête partagé:Y at-il un moyen de désactiver tous les avertissements avec un pragma?

#pragma warning(push) 

#pragma warning(disable:4820) 
#pragma warning(disable:4619) 
#pragma warning(disable:4668) 
#pragma warning(disable:4625) 
#pragma warning(disable:4626) 
#pragma warning(disable:4571) 
#pragma warning(disable:4347) 
#pragma warning(disable:4640) 
#pragma warning(disable:4365) 
#pragma warning(disable:4710) 
#pragma warning(disable:4820) 
#pragma warning(disable:4350) 
#pragma warning(disable:4686) 
#pragma warning(disable:4711) 
#pragma warning(disable:4548) 

#include <boost/array.hpp> 
#include <boost/assert.hpp> 
#include <boost/assign.hpp> 
#include <boost/bind.hpp> 
#include <boost/lexical_cast.hpp> 
#include <boost/filesystem.hpp> 
#include <boost/foreach.hpp> 
#include <boost/format.hpp> 
#include <boost/function.hpp> 
#include <boost/integer.hpp> 
#include <boost/optional.hpp> 
#include <boost/regex.hpp> 
#include <boost/smart_ptr.hpp> 
#include <boost/algorithm/string.hpp> 
#include <boost/tuple/tuple.hpp> 
#include <boost/utility.hpp> 
#include <boost/variant.hpp> 

#pragma warning(pop) 

Cela fonctionne assez bien, mais chaque fois que j'ajouter de nouveaux en-têtes de boost Je dois ajouter les avertissements qu'ils génèrent à la liste. Y at-il un moyen de dire désactiver tous les avertissements pour cette section de code?

Répondre

40

Vous pouvez pousser/pop un faible niveau d'avertissement, comme ceci:

#pragma warning(push, 0)   

#include <boost/bind.hpp> 
#include <boost/shared_ptr.hpp> 
// ... 

#pragma warning(pop) 

Mais sachez qu'il est impossible de désactiver tous les avertissements. Par exemple, certains avertissements de liaison sont impossibles à désactiver.

+0

Je ne veux pas fermer les yeux sur la nécromancie, mais dans votre commentaire ici je vois une relation 1 à 1 avec le push/pop des avertissements. Si je désactive N, devrais-je appeler la pop N fois? Encore une fois, désolé de ressusciter un vieux fil. – wheaties

+2

Le nombre d'avertissements que vous désactivez est sans importance. Le nombre de 'push' doit correspondre au nombre de 'pops' c'est tout. –

+2

Il est également intéressant de préciser que si #pragma warning (pop) 'est utilisé, certains avertissements (4514 est un exemple) seront toujours émis, probablement parce que ces conditions d'avertissement sont détectées dans un contexte de post-compilation. – alecov

4

Ce que je l'ai fait avant est réglé le « W3 » option plutôt que de « mur », puis dans chacun de mes propres fichiers .cpp source Je mis

#pragma warning(push, 4) 

au sommet après tous les « #include ... "lignes puis

#pragma warning(pop) 

comme dernière ligne du fichier. De cette façon, vous obtenez des avertissements de niveau 4 dans votre code et un niveau 3 dans un code tiers dont vous ne pouvez rien faire.

+1

Il semble que ce soit plus de travail pour envelopper chacun de vos propres fichiers de code avec une directive '#pragma warning' que d'envelopper simplement la partie ennemie' # includes'. Mais si cela fonctionne pour vous ... –

17
#pragma warning(disable:4820) 
#pragma warning(disable:4619) 
#pragma warning(disable:4668) 

pour moins de lignes ....

#pragma warning (disable : 4820 4619 4668) 
Questions connexes