2015-08-17 9 views
7

Ich suche nach einer Möglichkeit, alle möglichen Warnungen zu unterdrücken, die ich mit Gcc mit Pragma-Direktiven erhalten kann. Ich hatte einige Wächter-Makros gemacht, die mir helfen, Header von Drittanbietern von Warnungen zum Schweigen zu bringen, und jetzt funktionieren sie wie Charme für msvc und clang. Ich vermisse immer noch den korrekten Weg, Gcc-Diagnose-Pragmas zu verwenden, um jede Warnung in einem Abschnitt zu unterdrücken. Lassen Sie mich Ihnen ein paar Beispiele:So deaktivieren Sie alle Warnungen mit Pragma-Direktiven in GCC

In msvc wir dies tun können:

#pragma warning(push, 0) 
// Code that produces warnings... 
#pragma warning(pop) 

Und in Klirren können wir dies tun:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wall" 
#pragma clang diagnostic ignored "-Wextra" 
// Code that produces warnings... 
#pragma clang diagnostic pop 

Und der Code, der in der Mitte jetzt in ist von Warnungen für immer zum Schweigen gebracht werden.

Und in Gcc wir haben auch ähnliche Pragma-Richtlinien mit Klappern und ich dachte, ich so etwas wie dies versuchen könnte:

#pragma GCC diagnostic push 
#pramga GCC diagnostic ignored "-Wall" 
#pragma GCC diagnostic ignored "-Wextra" 
// Code that produces warnings... 
#pramga GCC diagnostic pop 

Aber vorbei -Wall und -Wextra in diagnostischen ignoriert Pragma in GCC funktioniert nicht wie Klirren und deaktiviert nicht alle möglichen Warnungen. Statt dem, indem bestimmte Warnung Werke deaktivieren:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-parameter" 
void foo (int x) // No longer getting "unused parameter 'x'" warning 
{ 
} 
#pragma GCC diagnostic pop 

So ist die einzige Abhilfe, die ich so weit denken kann, ist eine lange Liste mit allen GCC Warnflaggen zu machen und sie wie oben verwenden. Gibt es eine elegantere Lösung? Wenn nicht, wo ich die komplette Gcc-Warnflagliste (vorteilhaft in einer einfachen Liste) bekommen kann?

+0

Warum Warum Warum Warum Warum Warum Warum Warum Warnungen Deaktivieren? :(:(:(: –

+6

Da mein Code warnt kostenlos und 3rd Party Header, wie ich sagte manchmal enthalten Warnungen. – Fr0stBit

+0

"System" -Kopfzeilen sollen nicht ihre Diagnose Leck haben, aus diesem Grund. Wenn Sie in ihre Include-Pfad ziehen manuell mit '-I', benutze stattdessen' -isystem' Problem gelöst :) Dann kannst du deine Warnungen wieder aktivieren (plus '-Werror'!), um in Zukunft Bugs zu entdecken, die du in deinen Code einbringst Warnung jetzt frei, aber der ganze Zweck von Warnungen ist zu fangen, wenn Sie es in der Zukunft brechen ... –

Antwort

1

Documentation sagt:

Im Moment nur Warnungen (in der Regel gesteuert durch ‚-W ...‘) gesteuert werden können, und nicht alle von ihnen. Verwenden Sie -fdiagnostics-show-option, um festzustellen, welche Diagnose steuerbar ist und welche Option sie steuert.

+0

Wie benutze ich dieses Flag? Kann ich es irgendwie an gcc weitergeben, um eine Liste der Optionen zu bekommen? – Fr0stBit

+0

Ja, Sie bauen Ihre Dateien mit dieser Option, und es a dds etwas wie '[-Wunused-variable]' zu jeder Warnung. – Heavy

+0

Aber es ist immer noch nicht hilfreich, da mein Ziel entweder darin besteht, eine Möglichkeit zu finden, alle Warnungen mit einer cleveren Anweisung zu unterdrücken oder eine Liste mit allen kontrollierten Warnungen zu sammeln. – Fr0stBit