2009-01-24 12 views
22

bekomme ich diese Warnung von GCC:Machen Sie eine gcc Warnung einen Fehler?

warning: cannot pass objects of non-POD type 'class Something' through '...'; call will abort at runtime

Es ist ziemlich tödlich, vor allem, da es einen Abbruch nennt. Warum ist das nicht ein Fehler? Ich möchte es zu einem Fehler machen, aber:

  1. Wie mache ich eine spezifische Warnung einen Fehler?
  2. Welche Warnung ist es? Nach http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html sieht -Wno-invalid-offsetof wie die Flagge, es zu verbergen, aber es funktioniert nicht
+3

Glücklicherweise haben moderne Versionen von GCC (mindestens 4.6.3, aber wahrscheinlich früher) Sie wissen lassen, welche Warnmeldung eine bestimmte Warnung ausgelöst hat. Zum Beispiel: 'main.cpp: 12: 15: Fehler: Division durch Null [-Werror = div-by-zero]' –

+0

Und das ist einfach so ein wunderbares Feature. – hlovdal

Antwort

22

Ich bin nicht sicher, was die richtige Warnung ist, aber wenn Sie es gefunden haben, können Sie es mit der Anordnung ändern folgende (mit 'Format' als Beispiel):

#pragma GCC diagnostic error "-Wformat" 

Oder wie strager betont:

gcc -Werror=format ... 

Edit: ich habe gerade überprüft die gcc Quelle dafür und diese spezifische Warnung kann nicht über Kommandozeilen-Flags deaktiviert werden.

3

Mit dem Compiler-Flag -Werror können Sie alle oder einige Warnungen in Fehler umwandeln.

6

Es klingt, als gäbe es eine Reihe anderer Warnungen, die Sie nicht in Fehler verwandeln wollen (mit dem -Werror-Flag). Im Allgemeinen empfiehlt es sich, alle Warnungen zu korrigieren. Die Verwendung von -Werror erzwingt dies.

+0

Amen, Ihr Code sollte mit mindestens -Wall warntfrei sein (obwohl einige der Dinge, die -Wextra-Berichte entschuldbar sind, zum Beispiel nicht verwendete Variablen/Parameter). –

+1

Sie können -Wall -Wextra -Wno-unused-Parameter -Wno-unused-Funktionen ... Jede spezifische Warnung kann mit der -Wno- $ foo-Syntax deaktiviert werden, die es leicht macht, die Besonderheiten zu entschuldigen. Leider hilft es bei keiner Teilmenge der -pedantischen Warnungen. – Tom

+0

Warnungen sind keine Fehler, die "behoben" werden sollen. Und warnfreier Code ist ein schwer fassbares Konzept, es sei denn, Sie reparieren die Compiler-Version. Siehe auch [Tidbits: Für die Liebe Gottes, benutze nicht -Werror!] (Http://blog.schmorp.de/2016-02-27-weibchen-fur-die-liebe-von-gott-dont- use-werror.html). – Ruslan

10

-Werror=specific-warning wird die angegebene -Wspecific-warning in GCC 4.3.x oder neuer zu einem Fehler machen. In 4.1.2 funktioniert nur -Werror-implicit-function-declaration. Beachten Sie den Bindestrich anstelle von Gleichheitszeichen - es funktioniert nur für diesen bestimmten Fall und keine anderen. Dies ist eine der ernsteren allgemeinen Warnungen und es ist definitiv praktisch, es in einen Fehler zu verwandeln.

Abgesehen davon, scheinen ältere Versionen von GCC nur die -Werror Vorschlaghammer der letzten Warnung einen Fehler zu machen.

2

Sie können -fdiagnostics-show-option verwenden, um die Option -W anzuzeigen, die für eine bestimmte Warnung gilt.

Leider gibt es in diesem Fall keine spezielle Option, die diese Warnung abdeckt.

Es scheint, dass es in gcc-4.5 eine bessere Unterstützung dafür geben wird.

Verwandte Themen