Was ist das nächstgelegene GCC-Äquivalent zu diesem MSVC-Präprozessorcode?
#pragma warning( push ) // Save the current warning state.
#pragma warning( disable : 4723 ) // C4723: potential divide by 0
// Code which would generate warning 4723.
#pragma warning( pop ) // Restore warnings to previous state.
Wir haben Code in häufig enthaltenen Headern, für die wir keine spezifische Warnung generieren möchten. Wir möchten jedoch, dass Dateien, die diese Header enthalten, diese Warnung weiterhin generieren (wenn für das Projekt diese Warnung aktiviert ist).
Antworten:
Dies ist in GCC seit Version 4.6 oder um Juni 2010 im Trunk möglich.
Hier ist ein Beispiel:
quelle
#pragma GCC diagnostic [error|warning|ignored]
aber daspop
ist nicht implementiert / unterstützt.Die nächste Sache ist die GCC - Diagnose Pragma ,
#pragma GCC diagnostic [warning|error|ignored] "-Wwhatever"
. Es ist nicht sehr nah an dem, was Sie wollen, und siehe den Link für Details und Einschränkungen.quelle
#pragma
Richtlinie in der Vergangenheit abgelehnt , sodass alles, was GCC-spezifisch ist, wahrscheinlich eher als implementiert wird__attribute__((foo))
.#pragma GCC push_options
so dass Sie mit mehr als nur Diagnose herumspielen könnenIch habe etwas Ähnliches gemacht. Für Code von Drittanbietern wollte ich überhaupt keine Warnungen sehen. Also, anstatt zu spezifizieren
-I/path/to/libfoo/include
, habe ich verwendet-isystem /path/to/libfoo/include
. Dadurch behandelt der Compiler diese Header-Dateien zum Zweck von Warnungen als "System-Header". Solange Sie sie nicht aktivieren-Wsystem-headers
, sind Sie größtenteils sicher. Ich habe immer noch ein paar Warnungen gesehen, aber es reduziert den größten Teil des Mülls.Beachten Sie, dass dies nur dann hilfreich ist, wenn Sie den fehlerhaften Code nach include-directory isolieren können. Wenn es sich nur um eine Teilmenge Ihres eigenen Projekts handelt oder mit anderem Code vermischt ist, haben Sie kein Glück.
quelle
Dies ist eine Erweiterung der Antwort von Matt Joiner .
Wenn Sie nicht überall in Ihrem Code Pragmas erzeugen möchten, können Sie den Operator _Pragma verwenden :
quelle