私はこの警告をサードパーティのライブラリ (デバッグしたくない) から受け取り続けているので、この特定の警告を抑制する方法を本当に感謝しています。グーグルは私を失望させたので、ここにいます。
4 に答える
gcc4.6 以降では、プラグマを使用して特定の警告を抑制し、その抑制を特定のコード ブロックに対してのみ行うことができます。
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wno-enum-compare"
// Code that causes warning goes here
#pragma GCC diagnostic pop
プッシュ/ポップは、コードが処理される前に設定されていた診断オプションを保持するために使用されます。
#pragma GCC system_header
これは、すべての警告を抑制するために使用するよりもはるかに優れたアプローチです。(もちろん、古い gcc では、この#pragma GCC system_header
アプローチに「行き詰まる」場合があります!)
gcc 警告の抑制に関する参考資料は次のとおりです: http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html
-fdiagnostics-show-option
このページでは、特定の警告を制御するオプションを見つけるために使用する方法についても説明します。
もちろん、一般的には、警告を抑制するよりも、すべての警告の根本原因を修正する方がはるかに望ましいです! ただし、それができない場合もあります。
-Wno-enum-compare
この警告をバイパスします。
この特定の警告を無効にする方法が見つからなかったので、gcc の #pragma system_header を使用することにしました。基本的に、問題のあるヘッダーを次のようにラップしました。
#if defined __GNUC__ #pragma GCC system_header #elif 定義 __SUNPRO_CC #pragma disable_warn #elif 定義 _MSC_VER #pragma warning(プッシュ、1) #endif #include "foo.h" #定義されている場合 __SUNPRO_CC #pragma enable_warn #elif 定義 _MSC_VER #pragma warning(ポップ) #endif
where foo.h was the problematic header. Now I just include this fooWrapper.h and the problem goes away. Note that this should work for some other compilers too (MSC and SUNPRO), but I didn't test it.