Frage Wie deaktivierst du die unbenutzten variablen Warnungen, die aus gcc in 3rd Party Code kommen, den ich nicht bearbeiten möchte?


Ich würde gerne wissen, welchen Schalter Sie an den GCC-Compiler übergeben, um nicht verwendete variable Warnungen zu deaktivieren? Ich erhalte Fehler bei Boost-Fenstern 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, beides zu benutzen -Wunused-value und -Wno-unused-value aber die obigen Nachrichten wurden nicht unterdrückt.

Was ist der richtige Befehl, hier ist meine Kompilierzeile:

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 der -Wall überschreibt mein Ziel?


75
2018-02-24 16:24


Ursprung


Antworten:


Das -Wno-unused-variable Schalter macht normalerweise den Trick. Dies ist jedoch eine sehr nützliche Warnung, wenn Sie sich in Ihrem Projekt für diese Dinge interessieren. Es wird ärgerlich, wenn GCC beginnt, Sie über Dinge zu warnen, die nicht in Ihrem Code sind.

Ich würde dir empfehlen, die Warnung beizubehalten, aber zu verwenden -isystem Anstatt von -I für Include-Verzeichnisse von Drittanbieter-Projekten. Diese Flagge sagt GCC, Sie nicht vor den 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!


195
2018-02-24 16:31



Manchmal müssen Sie nur einige Warnungen unterdrücken und andere Warnungen speichern, um sicher zu gehen. In Ihrem Code können Sie die Warnungen für Variablen und sogar für formale Parameter unterdrücken, indem Sie GCCs verwenden ungebraucht Attribut. Sagen wir, Sie haben dieses Code-Snippet:

void func(unsigned number, const int version)
{
  unsigned tmp;
  std::cout << number << std::endl;
}

Es kann eine Situation geben, wenn Sie diese Funktion als Handler verwenden müssen - was (imho) ist in der C ++ Boost-Bibliothek recht üblich. Dann brauchen Sie den zweiten formalen Parameter AusführungDaher entspricht die Signatur der Funktion der Vorlage, die der Handler benötigt, andernfalls würde die Kompilierung fehlschlagen. Aber Sie brauchen es auch nicht wirklich in der Funktion selbst ...

Die Lösung, wie man eine Variable oder den formalen Parameter markiert, der von Warnungen ausgeschlossen werden soll, lautet wie folgt:

void func(unsigned number, const int version __attribute__((unused)))
{
  unsigned tmp __attribute__((unused));
  std::cout << number << std::endl;
}

GCC hat viele andere Parameter, Sie können sie in der Manpages. 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 damit Warnungen vor Boosts Serialisierung in einer Vorlage wie folgt unterdrückt:

template <typename Archive>
void serialize(Archive &ar, const unsigned int version __attribute__((unused)))

EDIT: Anscheinend habe ich Ihre Frage nicht beantwortet, wie Sie brauchten, drak0sha mach es besser. Weil ich hauptsächlich dem Titel der Frage gefolgt bin, mein Schlechter. Hoffentlich hilft das anderen Leuten, die wegen dieses Titels hierher kommen ... :)


59
2018-04-28 02:22



Wenn Sie gcc verwenden und die Warnung für ausgewählten Code deaktivieren möchten, können Sie die # pragma-Compiler-Direktive verwenden:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
( your problematic library includes )
#pragma GCC diagnostic pop

Für Code, den Sie steuern, können Sie auch verwenden __attribute__((unused)) um den Compiler anzuweisen, dass bestimmte Variablen nicht verwendet werden.


56
2018-03-28 09:17



Sehen man gcc unter Warnoptionen. Da hast du eine ganze Menge unused 

Warnoptionen
  ... -Wunused -Wunused-Funktion -Wunsed-Label -Wunused-Parameter -Wunused-Wert -Wunused-Variable -Wunused-but-set-Parameter -Wunused-but-set-variable

Wenn Sie einem von ihnen einen Präfix voranstellen no-, wird diese Warnung deaktiviert.

Viele Optionen haben lange Namen, die mit -f oder mit -W --- beginnen, zum Beispiel -fmove-loop-invariants, -Wformat und so weiter. Die meisten von ihnen haben sowohl positive als auch negative Formen; die negative Form von -ffoo wäre-fno-foo. In diesem Handbuch wird nur eine dieser beiden Formen dokumentiert, je nachdem, welche nicht die Standardeinstellung ist.

Eine ausführlichere Erklärung finden Sie unter Optionen zum Anfordern oder Unterdrücken von Warnungen


13
2018-02-24 16:30



Benutzen -Wno-unused-variable sollte arbeiten.


9
2018-02-24 16:26



Der Compiler sagt es dir bereits, das ist es nicht value aber variable. Du suchst nach -Wno-unused-variable. Probiere auch g++ --help=warnings um eine Liste der verfügbaren Optionen zu sehen.


3
2018-02-24 16:28



Wie deaktivierst du die nicht verwendeten variablen Warnungen, die aus gcc kommen?
  Ich bekomme Fehler von Boost auf Windows und ich möchte den Boost-Code nicht berühren ...

Du besuchst Boosts Trac und einen Fehlerbericht gegen Boost einreichen.

Ihre Anwendung ist nicht für das Löschen von Warnungen und Fehlern in der Bibliothek verantwortlich. Die Bibliothek ist verantwortlich für das Löschen eigener Warnungen und Fehler.


1
2017-07-26 19:52



Entferne das -Wall und es sollte funktionieren. Problem mit dem Entfernen -Wall Es unterdrückt auch legitime Warnungen. Sie müssten die Hand auswählen -W Optionen in diesem Fall oder zu ändern -Wno-unused-variable Sobald Sie alle Warnungen abgedeckt haben.

LOCAL_CFLAGS = -Wno-unused-variable -g

-3
2018-05-28 22:13



export IGNORE_WARNINGS=1

Es werden Warnungen angezeigt, es wird jedoch mit dem Build fortgesetzt


-3
2017-10-14 09:53