47 Stimmen

Gibt es eine Möglichkeit, alle Warnungen mit einem pragma zu deaktivieren?

Ich habe ein neues Projekt begonnen und möchte sicherstellen, dass es mit aktivierter /Wall-Option sauber gebaut wird. Das einzige Problem ist nicht alle Bibliotheken von Drittanbietern (wie boost) kompilieren ohne Warnungen, so dass ich geflüchtet bin, dies in einem gemeinsamen Header zu tun:

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

Das funktioniert gut genug, aber jedes Mal, wenn ich neue Boost-Kopfzeilen hinzufüge, muss ich die von ihnen erzeugten Warnungen in die Liste aufnehmen. Gibt es eine Möglichkeit zu sagen, deaktivieren Sie alle Warnungen für diesen Abschnitt des Codes?

64voto

Assaf Lavie Punkte 67504

Sie können eine niedrige Warnstufe einschalten, etwa so:

#pragma warning(push, 0)        

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

#pragma warning(pop)

Sie sollten aber wissen, dass es nicht möglich ist, die Funktion zu deaktivieren. alle Warnungen. Einige Linker-Warnungen lassen sich zum Beispiel nicht abschalten.

29voto

EvilTeach Punkte 27313
#pragma warning(disable:4820)
#pragma warning(disable:4619)
#pragma warning(disable:4668)

für weniger Zeilen....

#pragma warning (disable : 4820 4619 4668)

5voto

Matt Warren Punkte 10169

Was ich bisher getan habe, ist die Option "W3" statt "Wall", dann in jedem meiner eigenen Quell-.cpp-Dateien setzen ich

#pragma warning(push, 4)

am Anfang NACH allen "#include..."-Zeilen und dann

#pragma warning(pop)

als allerletzte Zeile in der Datei.

Auf diese Weise erhalten Sie Stufe 4-Warnungen in Ihrem Code und Stufe 3-Warnungen im Code von Drittanbietern, gegen die Sie nichts unternehmen können.

5voto

PolarBear Punkte 727

Mit der in der Anleitung beschriebenen Technik Assaf Lavie's Antwort ist es möglich, Hilfsmakros zu erstellen:

#define DISABLE_ALL_WARNINGS_BEGIN \
    __pragma(warning(push, 0))

#define DISABLE_ALL_WARNINGS_END \
    __pragma(warning(pop))

Sie können auf folgende Weise verwendet werden ( Online-Demo ):

DISABLE_ALL_WARNINGS_BEGIN
void foo(int a)
{
    // this function should generate the following warning
    // "warning C4100: 'a': unreferenced formal parameter"
    // unless it is wrapped inside "DISABLE_ALL_WARNINGS" section
}
DISABLE_ALL_WARNINGS_END

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X