C++アプリケーションの開発中に、使用されている無害な#pragmaディレクティブに関連する大量の警告を生成するサードパーティライブラリを使用する必要がありました。
../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
from ../File3.hpp:57,
from File4.h:49,
GNU C++コンパイラを使用している場合、この種の警告を無効にすることは可能ですか?
コンパイルできると思います
-Wno-unknown-pragmas
これらを抑制するために。
GCCで、-Wno-unknown-pragmasを使用してコンパイルします
MS Visual Studio 2005(この質問はgccでタグ付けされていないため、参照用にこれを追加しています)では、[プロジェクト設定]-> [C/C++]-> [詳細設定]でグローバルに無効にできます。 「特定の警告を無効にする」に4068を入力します
または、これを任意のファイルに追加して、ローカルで警告を無効にすることができます
#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */
おそらく GCC Diagnostic Pragmas ?あるいは、この場合、 オプションの組み合わせ that -Wall
を有効にします。ただし、-Wunknown-pragmas
。
先端をありがとう。私の場合、Qt Mingwで作業しています。 .PROファイルで別の方法でフラグを設定する必要があります。
QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas
私は質問がGCCに関するものであることを知っていますが、これを可能な限り移植性のあるものにしたい人のために:
この警告を発することができるほとんどのコンパイラには、コマンドライン(例外:PGI)またはコード(例外:DMC)から警告を無効にする方法があります。
-Wno-unknown-pragmas
_/_#pragma GCC diagnostic ignored "-Wunknown-pragmas"
_-Wno-unknown-pragmas
_/_#pragma clang diagnostic ignored "-Wunknown-pragmas"
_-diag-disable 161
_/#pragma warning(disable:161)
#pragma diag_suppress 1675
_-wd4068
_/#pragma warning(disable:4068)
--diag_suppress,-pds=163
_/_#pragma diag_suppress 163
_--diag_suppress Pe161
_/_#pragma diag_suppress=Pe161
_-w17
_このほとんどを単一のマクロに組み合わせてコードで使用できます。これは、 Hedley の _HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
_ マクロに対して行ったことです。
_#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
_
この回答を更新するのを忘れる可能性があるため、Hedleyはこの回答よりも完全な情報を持っている可能性があることに注意してください。 )上記の情報の代わりに、Hedleyをガイドとして使用できます。
バージョンチェックはおそらく過度に悲観的ですが、プロプライエタリコンパイラの古いバージョンについての良い情報を入手するのが難しい場合があり、申し訳ありませんが安全です。繰り返しになりますが、ヘドリーの情報の方が良いかもしれません。
多くのコンパイラは、警告をスタックにプッシュ/ポップすることもできるので、プッシュしてから、制御しないコードを含める前にそれらを無効にして、ポップすることができますyourコードは引き続き問題の警告をトリガーします(したがって、クリーンアップできます)。ヘドレーにもそのためのマクロがあります: _HEDLEY_DIAGNOSTIC_Push
_ / _HEDLEY_DIAGNOSTIC_POP
_ 。