Ich möchte wissen, welchen Schalter Sie an den gcc-Compiler übergeben, um nicht verwendete Variablenwarnungen zu deaktivieren. Ich bekomme Fehler durch Boost unter Windows und möchte den Boost-Code nicht berühren:
C:\boost_1_52_0/boost/system/error_code.hpp: At global scope:
C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable]
C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable]
Ich habe versucht , sowohl mit -Wunused-value
und -Wno-unused-value
aber weder unterdrückt die Meldungen über.
Was ist der richtige Befehl, hier ist meine Kompilierungszeile:
g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow
-Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion
-Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated
-IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
-c -o op.o op.cpp
Vielleicht -Wall
überschreibt das mein Ziel?
c++
gcc
compiler-warnings
compiler-flags
WilliamKF
quelle
quelle
-Werror=no-unused-variable
Antworten:
Der
-Wno-unused-variable
Schalter macht normalerweise den Trick. Dies ist jedoch in der Tat eine sehr nützliche Warnung, wenn Sie sich in Ihrem Projekt um diese Dinge kümmern. Es wird ärgerlich, wenn GCC Sie vor Dingen warnt, die nicht in Ihrem Code enthalten sind.Ich würde empfehlen, die Warnung beizubehalten, aber
-isystem
anstelle von-I
Verzeichnissen von Projekten von Drittanbietern zu verwenden. Dieses Flag weist GCC an, Sie nicht vor Dingen zu warnen, über die Sie keine Kontrolle haben.Zum Beispiel statt
-IC:\\boost_1_52_0
sagen-isystem C:\\boost_1_52_0
.Ich hoffe es hilft. Viel Glück!
quelle
-Wno-unused-parameter
für nicht verwendete Funktionsparameter,-Wno-unused-function
für nicht verwendete Funktion-Wno-unused-but-set-variable -Wno-unused-parameter -Wno-unused-variable
Manchmal müssen Sie nur einige Warnungen unterdrücken und möchten andere Warnungen beibehalten, um sicher zu gehen. In Ihrem Code können Sie die Warnungen für Variablen und sogar formale Parameter mithilfe des nicht verwendeten Attributs von GCC unterdrücken . Nehmen wir an, Sie haben dieses Code-Snippet:
Es kann vorkommen, dass Sie diese Funktion als Handler verwenden müssen - was (imho) in der C ++ Boost-Bibliothek durchaus üblich ist. Dann müssen Sie die zweite formale Parameter Version , so dass die Signatur der Funktion das gleiche wie die Vorlage ist der Handler benötigt, sonst wäre die Kompilierung fehlschlagen. Aber Sie brauchen es auch nicht wirklich in der Funktion selbst ...
Die Lösung zum Markieren von Variablen oder formalen Parametern, die von Warnungen ausgeschlossen werden sollen, lautet wie folgt:
GCC hat viele andere Parameter, die Sie in den Manpages überprüfen können . Dies funktioniert auch für die C-Programme, nicht nur für C ++, und ich denke, es kann in fast jeder Funktion verwendet werden, nicht nur in Handlern. Probieren Sie es aus! ;)
PS: In letzter Zeit habe ich dies verwendet, um Warnungen vor der Serialisierung von Boosts in einer Vorlage wie der folgenden zu unterdrücken:
EDIT: Anscheinend habe ich deine Frage nicht so beantwortet, wie du es brauchst . Drak0sha hat es besser gemacht. Es ist, weil ich hauptsächlich dem Titel der Frage gefolgt bin, mein schlechtes. Hoffentlich könnte dies anderen Leuten helfen, die wegen dieses Titels hierher kommen ... :)
quelle
void func(unsigned number, const int)
. Dann wird sich gcc auch nicht über unbenutzte beschwerenversion
.gcc
Version ab, die Sie verwenden. IIRC, ich musste es vor 4 Jahren verwenden, um Warnungen vor unbenutzten zu unterdrückenversion
. ;)Wenn Sie gcc verwenden und die Warnung für den ausgewählten Code deaktivieren möchten, können Sie die Compiler-Direktive #pragma verwenden:
Für Code, den Sie steuern, können Sie
__attribute__((unused))
den Compiler auch anweisen, dass bestimmte Variablen nicht verwendet werden.quelle
#pragma
Direktiven sind absolut sicher, wenn Sie sie einpacken#ifdef some_compiler ... #endif
. Warnungen sind eine compilerspezifische Funktion und werden vom Standard nicht definiert. Sie können keine Warnungen aus Code ohne#pragma
s unterdrücken .Siehe
man gcc
unter Warnoptionen. Dort haben Sie eine ganze Reihe vonunused
Wenn Sie einem von ihnen ein Präfix voranstellen
no-
, wird diese Warnung deaktiviert.Eine ausführlichere Erläuterung finden Sie unter Optionen zum Anfordern oder Unterdrücken von Warnungen
quelle
Verwendung
-Wno-unused-variable
sollte funktionieren.quelle
-Wno-error=unused-variable
wenn Sie den Fehler beheben und die Warnung beibehalten möchten.[-Werror=unused-variable]
.Der Compiler sagt es dir schon, es ist
value
aber nicht sovariable
. Sie suchen-Wno-unused-variable
. Versuchen Sie auchg++ --help=warnings
, eine Liste der verfügbaren Optionen anzuzeigen.quelle
Sie besuchen Boost's Trac und reichen einen Fehlerbericht gegen Boost ein.
Ihre Anwendung ist nicht für das Löschen von Warnungen und Fehlern in der Bibliothek verantwortlich. Die Bibliothek ist dafür verantwortlich, ihre eigenen Warnungen und Fehler zu löschen.
quelle
-Wall
und-Wextra
legt die Bühne in GCC fest und die nachfolgende-Wno-unused-variable
kann nicht wirksam werden. Zum Beispiel, wenn Sie haben:CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -Wall -Wextra \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ -Wno-unused-parameter \ -Wno-unused-variable \ $(INC)
dann sieht GCC die Anweisung
-Wall -Wextra
und scheint sie zu ignorieren-Wno-unused-variable
Dies kann stattdessen wie folgt aussehen und Sie erhalten den gewünschten Effekt, dass Sie in Ihrer Kompilierung für die nicht verwendete Variable nicht gestoppt werden:
CFLAGS += -std=c99 -pedantic -pedantic-errors -Werror -g0 -Os \ -fno-strict-overflow -fno-strict-aliasing \ -pthread \ -Wno-unused-label \ -Wno-unused-function \ $(INC)
Es gibt einen guten Grund, warum es als "Warnung" oder "Fehler" bezeichnet wird. Das Fehlschlagen der Kompilierung, nur weil Ihr Code nicht vollständig ist (sagen wir, Sie stubben den Algorithmus aus), kann eine Niederlage bedeuten.
quelle
Es werden zwar Warnungen angezeigt, der Build wird jedoch fortgesetzt
quelle