GCC Warnungen für einige Zeilen Code deaktivieren
-
Hi!
Habe ein Projekt mit Qt/Ogre am laufen, und die Haufen von Warnungen die durch die eingebundenen Header entstehen, lassen mich nicht die von meinem eigenen Code sehen.
Ich kenne ja die GCC diagnostics Pragmas:
#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wall" #pragma GCC diagnostic ignored "-Wextra" #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #pragma GCC diagnostic ignored "-Wunused-parameter" #pragma GCC diagnostic ignored "-Wunused-but-set-parameter" // includes #pragma GCC diagnostic pop
Das ist mir aber zu lang. Geht das auch kürzer?
MfG
-
Schreib dir abbreviations.
-
Nathan schrieb:
Schreib dir abbreviations.
Meinst du in CodeBlocks? Ja, aber ich will ja dass es im CODE kürzer wird. Das C&P ist ja kein Problem.
-
Ja, meinte ich.
Ach so.
-
#include "qt_pushwarning.h" // .... #include "qt_popwwarning.h"
-
Sone schrieb:
Ja, aber ich will ja dass es im CODE kürzer wird. Das C&P ist ja kein Problem.
-
Ich ging jetzt davon aus, er meint den Code, den er damit instruieren möchte, nicht den Code, den man dort nicht sieht.
-
Es gibt für GCC das
_Pragma
builtin, später zu einem#pragma
expandiert.#define DO_PRAGMA_(a) _Pragma(a) #define DO_PRAGMA(a) DO_PRAGMA_(#a) #define DIAGNOSTIC_PUSH_1(a) DO_PRAGMA(GCC diagnostic push a) #define DIAGNOSTIC_PUSH_2(a,...) DIAGNOSTIC_PUSH_1(a) DIAGNOSTIC_PUSH_1(__VA_ARGS__) #define DIAGNOSTIC_PUSH_3(a,...) DIAGNOSTIC_PUSH_1(a) DIAGNOSTIC_PUSH_2(__VA_ARGS__) #define DIAGNOSTIC_PUSH_4(a,...) DIAGNOSTIC_PUSH_1(a) DIAGNOSTIC_PUSH_3(__VA_ARGS__) #define DIAGNOSTIC_PUSH_5(a,...) DIAGNOSTIC_PUSH_1(a) DIAGNOSTIC_PUSH_4(__VA_ARGS__) #define NUM_ARGS2(X,X5,X4,X3,X2,X1,N,...) N #define NUM_ARGS(...) NUM_ARGS2(0, __VA_ARGS__ ,5,4,3,2,1,0) #define DIAGNOSTIC_PUSH_N3(M, ...) M (__VA_ARGS__) #define DIAGNOSTIC_PUSH_N2(N, ...) DIAGNOSTIC_PUSH_N3(DIAGNOSTIC_PUSH_ ## N, __VA_ARGS__) #define DIAGNOSTIC_PUSH_N(N, ...) DIAGNOSTIC_PUSH_N2(N, __VA_ARGS__) #define DiagnosticPush(...) \ _Pragma("GCC diagnostic push") \ DIAGNOSTIC_PUSH_N(NUM_ARGS(__VA_ARGS__), __VA_ARGS__) #define DiagnosticPop() \ _Pragma("GCC diagnostic pop") DiagnosticPush("-Wall", "-Wextra", "-Wmissing-field-initializers", "-Wunused-parameter", "-Wunused-but-set-parameter") void f(); DiagnosticPop()
Das ganze ist variadisch (bis zu 5 Parameter), d.h.
DiagnosticPush("-Wall", "-Wextra", "-Weffc++")
geht genauso.
-
Ja, instruierer, das ist toll, vielen Dank! #
Habs ein 'wenig' abgeändert und hinzugefügt.
-
Öhm, es gibt doch einen ganz einfachen Schalter, der GCC dazu bringt, Warnungen für Systemheader nicht anzuzeigen. Ist das nicht sogar default? Oder hast du die Qt-/Ogre-Header zu deinem Code kopiert?
-
Ansonsten:
GCC-Manual schrieb:
The -isystem command line option adds its argument to the list of directories to search for headers, just like -I. Any headers found in that directory will be considered system headers.
-
Gerade erst entdeckt, c-plusplus.net ist wohl ein wenig verbuggt was die anzeige von "ungelesene Nachrichten" angeht...
Das ist auch super! Vielen Dank! Seh' ich mir an.
-
Ja, das macht es für CodeBlocks wunderbar leicht:
Mit dem neuesten Nightly folgendes machen:
Settings Compiler Entsprechenden Compiler auswählen Other Settings (der Reiter ganz Rechts) Advanced Options Others "Add header files search path (e.g. -I):" zu -isystem ändern