2013-06-01 4 views
8

Wenn Sie die #warning Direktive verwenden, bekomme ich statt einer Warnung zwei - die eine, die ich generiere, plus eine zusätzliche warning: #warning is a GCC extension [enabled by default].Wie kann ich die GCC-Warnung deaktivieren, dass die #warning-Direktive eine GCC-Erweiterung ist?

Ich kann das Ergebnis der #warning Direktive selbst unterdrücken, mit -Wno-cpp, aber das ist das Gegenteil von dem, was ich will.

Ich kann dies umgehen, indem Sie stattdessen #pragma message() verwenden, aber das scheint die #warning-Anweisung eher sinnlos zu machen - gibt es keine Möglichkeit, diese Warnung zu unterdrücken?

+1

Welche Optionen haben Sie an GCC weitergeleitet? –

+0

Es war '-g -statisch -static-libgcc -Wall -Wextra -pedantisch -Wno-vla -Wsizeof-Zeiger-memaccess -Wissende-Deklarationen -march = native-fexceptions-fexpensive-Optimierungen -flto-O3-std = C++ 1y -fsanitize = Adresse in diesem Fall - siehe meine Antwort unten, ich erkannte, dass es die -pedantische Option war, die verantwortlich war. – Riot

Antwort

3

Ah, es scheint, dass die Option -pedantic diese Warnung aktiviert, und es scheint keine spezielle Überschreibung dafür zu geben, wie es bei den meisten anderen GCC-Warnungen der Fall ist. Das Entfernen von -pedantic beseitigt die Warnung über eine Warnung.

0
#ifdef __GNUC__ 
#warning "no warning here!" 
#endif 

mit -pedantic mit oder ohne gcc, selbst kompilieren, aber es wird immer noch die Warnung geben, (und fehlschlagen, wenn Warnungen Fehler eskaliert werden).

UPDATE: Nach this related question gibt es keine saubere Lösung, um selektiv die Warnungen über das Gnu-spezifisches #pragma s

+0

Natürlich kompiliert es in jedem Fall, aber das macht nichts, um die Warnung loszuwerden: 'warning: #warning ist eine GCC-Erweiterung [standardmäßig aktiviert]' – Riot

+0

Ja, das habe ich gerade selbst bemerkt. Verzweifelt auf der Suche nach einem Pragma, um das verdammte Ding abzuschalten. (Hinzufügen von '#pragma GCC-Diagnose ignoriert" -Wunknown-Pragmas "' scheint nicht zu funktionieren.) – wildplasser

0

Eigentlich zu deaktivieren, sollte Folgendes funktionieren. Damit können Sie die gcc-Warnungen unterdrücken/ignorieren.

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wcpp" 

... 

#pragma GCC diagnostic pop 
+2

Obwohl dies eine gute Idee ist, habe ich Angst, dass dies nicht mit den -pedantic Warnungen funktionieren wird. Siehe Testcode hier: http://coliru.stacked-crooked.com/view?id=53358c525169b7c2750ed1eb09dff702-0f11904895a20602a6e5ca9f4b5b0039 – Riot