2009-02-08 7 views
29

Ich habe ein neues Projekt gestartet und entschieden, dass es sauber erstellt wird, wenn die Option/Wall aktiviert ist. Das einzige Problem ist nicht alle 3rd-Party-Bibliotheken (wie Boost) ohne Warnungen kompilieren, also habe ich in einem gemeinsamen Header zu tun dies zurückgegriffen:Gibt es eine Möglichkeit, alle Warnungen mit einem Pragma zu deaktivieren?

#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) 

Dies funktioniert gut genug, aber jedes Mal, wenn ich neue Impulse Header hinzufügen Ich muss alle Warnungen, die sie generieren, der Liste hinzufügen. Gibt es eine Möglichkeit zu sagen, alle Warnungen für diesen Codeabschnitt zu deaktivieren?

Antwort

40

Sie schieben kann/eine zureichende Warnung Pop, wie folgt aus:

#pragma warning(push, 0)   

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

#pragma warning(pop) 

Aber wissen, dass es nicht möglich ist alle Warnungen zu deaktivieren. Zum Beispiel können einige Linker Warnungen nicht ausgeschaltet werden.

+0

meine ich nicht Nekromantie dulden, sondern in ihrem Kommentar hier sehe ich eine 1-zu-1-Beziehung mit dem Push/Pop von Warnungen. Wenn ich N Warnungen deaktiviere, muss ich Pop N mal anrufen? Es tut mir leid, einen alten Thread wieder auferstehen zu lassen. – wheaties

+2

Die Anzahl der Warnungen, die Sie deaktivieren, ist irrelevant. Die Anzahl der "Pushs" muss der Anzahl der "Pops" entsprechen. –

+2

Es ist auch interessant zu sagen, dass, wenn '#pragma warning (pop)' verwendet wird, einige Warnungen (4514 ist ein Beispiel) immer noch ausgegeben werden, wahrscheinlich weil diese Warnbedingungen in einem Kontext nach der Kompilierung entdeckt werden. – alecov

4

Was ich vorher getan wird, um die „W3“ Option statt „Wall“ setzen dann in jedem meiner eigenen Quelle CPP-Dateien habe ich

#pragma warning(push, 4) 

an der Spitze nach all den „# include ... "Zeilen und dann

#pragma warning(pop) 

als die letzte Zeile der Datei.

Auf diese Weise erhalten Sie Level 4 Warnungen in Ihrem Code und Level 3 in 3rd Party Code, über die Sie nichts machen können.

+1

Es scheint mehr Arbeit zu sein, jede einzelne Ihrer eigenen Code-Dateien mit einer '#pragma warning'-Anweisung zu umhüllen, als nur die beleidigende dritte Partei' # includes' einzupacken. Aber wenn es für dich funktioniert ... –

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

für weniger Linien ....

#pragma warning (disable : 4820 4619 4668) 
Verwandte Themen