Frage

Während eine C ++ Anwendung entwickelt, hatte ich eine 3rd-Party-Bibliothek zu verwenden, die eine riesige Menge von Warnungen erzeugte im Zusammenhang mit einer harmlosen Pragma-Richtlinie verwendet wird.

../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
                 from ../File3.hpp:57,
                 from File4.h:49,

Ist es möglich, diese Art von Warnungen zu deaktivieren, bei der Verwendung des GNU C ++ Compiler?

War es hilfreich?

Lösung

Ich glaube, man kann mit kompilieren

-Wno-unknown-pragmas

diese zu unterdrücken.

Andere Tipps

In GCC kompiliert mit -Wno-unknown-Pragmas

> Erweitert -

In MS Visual Studio 2005 (diese Frage nicht mit gcc markiert ist, so dass ich bin, diese als Referenz), können Sie global im Projekt Einstellungen-> C / C ++ deaktivieren. Geben Sie 4068 in "Deaktivieren Spezifische Warnungen"

oder Sie können diese in der beliebigen Datei Warnungen deaktivieren lokal

#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */

Vielleicht finden Sie unter GCC Diagnostic Pragmas ? Alternativ kann in diesem Fall könnten Sie die Kombination von Optionen verwenden dass -Wall ermöglicht, ohne -Wunknown-pragmas.

Danke jeden für den Tipp. In meinem Fall, ich arbeite mit Qt Mingw. Ich brauche Flagge einen anderen Weg zu setzen, in meiner .proDatei:

QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas

Ich weiß, dass die Frage nach GCC ist, sondern für die Menschen wollen dies so portabel wie möglich tun:

Die meisten Compiler, die diese Warnung eine Möglichkeit haben, emittieren können die Warnung entweder von der Kommandozeile aus (Ausnahme: PGI) zu deaktivieren oder in Code (Ausnahme: DMC):

  • GCC: -Wno-unknown-pragmas / #pragma GCC diagnostic ignored "-Wunknown-pragmas"
  • Klirren: -Wno-unknown-pragmas / #pragma clang diagnostic ignored "-Wunknown-pragmas"
  • Intel C / C ++ Compiler: -diag-disable 161 / #pragma warning(disable:161)
  • PGI: #pragma diag_suppress 1675
  • MSVC: -wd4068 / #pragma warning(disable:4068)
  • TI: --diag_suppress,-pds=163 / #pragma diag_suppress 163
  • IAR C / C ++ Compiler: --diag_suppress Pe161 / #pragma diag_suppress=Pe161
  • Digital Mars C / C ++ Compiler: -w17

Sie können die meisten dieser in einem einzigen Makro kombinieren in Ihrem Code zu verwenden, das, was ich tat für die HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS Makro in Hedley :

#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif HEDLEY_TI_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif

Beachten Sie, dass Hedley kann vollständigere Informationen über diese Antwort haben, da ich wahrscheinlich diese Antwort aktualisieren werde vergessen, so dass, wenn Sie wollen nicht nur Hedley verwenden (es ist eine einzelne public domain C / C ++ Header können Sie leicht fallen in dich) projizieren möchten Sie vielleicht über Hedley als Führung anstelle der Informationen verwenden.

Die Versionsprüfungen sind wahrscheinlich zu pessimistisch, aber manchmal ist es schwer, gute Informationen über veraltete Versionen von proprietären Compiler zu bekommen, und ich mag lieber als Nachsicht sein. Auch hier können Hedley der Informationen besser sein.

Viele Compiler können auch Push / Pop-Warnungen auf einen Stapel, so dass man drücken kann, dann sie deaktivieren, bevor Code einschließlich Sie kontrollieren nicht, dann so pop Ihre Code wird immer noch die Warnung auslösen in Frage (so können Sie es aufzuräumen). Es gibt Makros für die in Hedley auch: HEDLEY_DIAGNOSTIC_PUSH / HEDLEY_DIAGNOSTIC_POP .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top