2009-07-22 5 views
4

Ich verbinde meinen C++ - Code mit mehreren Bibliotheken (von denen einige stark header-basiert sind), von denen einige seit einiger Zeit nicht mehr aktualisiert wurden. Ich habe meinen Code mit -Wall und Wextra auf GCC 4.0 für eine Weile ohne Warnungen oder Fehler kompiliert. Jetzt, da ich eine neuere Version von GCC (4.3) verwende, haben einige meiner Dateien Warnungen aus den Include-Dateien anderer Bibliotheken gedruckt (z. B. warning: type qualifiers ignored on function return type, wenn der Vorlagencode der Bibliothek das Schlüsselwort restrict für einen zurückgegebenen Zeiger verwendet). In ähnlicher Weise gibt eine der etwas älteren OpenMPI-Versionen auf einem von mir verwendeten Cluster beim Kompilieren mit GCC 4.1 viele Warnungen aus.Compiler-Warnungen in anderen Bibliotheken

Die Frage ist: Kann ich alles tun, um Warnungen zu deaktivieren nur in anderen Menschen Code, wenn Sie ein lokales Verzeichnis zum Lesen einer Header-Datei verlassen? Ich möchte meinen Code so sauber und korrekt wie möglich machen (daher aktiviere ich alle Warnungen), aber der Zweck ist besiegt, wenn mein make-Prozess von Problemen überladen ist, die ich nicht beheben kann. Muss ich bestimmte Warnungen, die in ihrem Code auftauchen, nur global deaktivieren?

Antwort

4

Eine Sache, die in den Sinn kommt, ist die Verwendung von -isystem anstelle von -I bei der Benennung des Include-Verzeichnisses. Dies behandelt es als Systemkopfzeile, was bedeutet, dass gcc keine Warnungen für Dinge in ihnen zeigt.

Ich bin mir nicht sicher, ob GCC beginnt, ihnen eine andere Behandlung zu geben, obwohl. Überprüfen Sie zuerst die gcc-Dokumentation, um auf der sicheren Seite zu sein.

+0

Ich glaube nicht - System ändert nichts anderes. Dies war mein Ansatz, und es hat gut funktioniert. Das einzige Problem ist, dass es immer noch Fehler aufgrund von Makroexpansion in Ihrem eigenen Code gibt (wo der Header das Makro definiert). –

3

Siehe die Antworten auf diese ähnliche Frage:

Conditionally disable warnings with qmake/gcc?

war Mein Vorschlag 3rd-Party-Header indirekt über Wrapper-Header Ihrer eigenen zu schließen, und in diesen Header wechseln Warnungen mit Pragmas aus und dann wieder auf wieder nach dem # beinhaltet für die 3rd Party Header.

1

Eine weitere ähnliche Frage: in verlinkten Beitrag Is there a way to disable all warnings with a pragma?

ich mir keine Sorgen über alle Warnungen in den 3rd-Party-Bibliotheken war so einfach, sie alle wie beschrieben ignoriert. Besonders gut funktioniert, da alle Includes in einem vorkompilierten Header enthalten waren.

Edit: Whoops, ist #pragma Warnung nur VC++?

+0

Ja, es ist nur VC++. gcc scheint keine feinkörnige Warnkontrolle zu haben. – Eugene