質問

この MSVC プリプロセッサ コードに最も近い GCC は何ですか?

#pragma warning( push )                    // Save the current warning state.
#pragma warning( disable : 4723 )          // C4723: potential divide by 0
// Code which would generate warning 4723.
#pragma warning( pop )                     // Restore warnings to previous state.

一般的にインクルードされるヘッダーには、特定の警告を生成したくないコードがあります。ただし、これらのヘッダーを含むファイルでは引き続きその警告が生成されるようにしたいと考えています (プロジェクトでその警告が有効になっている場合)。

他のヒント

最も近いものは、 GCC診断プラグマで、#pragma GCC diagnostic [warning|error|ignored] "-Wwhatever"です。それはあなたが望むものに非常に近接していない、と詳細と注意事項については、リンクを参照してください。

私は何か似てやりました。サードパーティのコードについては、私はまったくの警告を見たくありませんでした。だから、-I/path/to/libfoo/includeを指定するのではなく、私が-isystem /path/to/libfoo/includeを使用しました。これは、コンパイラは警告の目的のために、「システムヘッダ」として、これらのヘッダファイルを扱い、そして限り、あなたが-Wsystem-headersを有効にしないと、あなたは主に安全だなります。私はまだいくつかの警告が外に漏れて見てきましたが、それはジャンクのほとんどが削減ます。

あなたはインクルードディレクトリで問題のあるコードを分離することができた場合、これはののみのはあなたを助けることに注意してください。それはあなた自身のプロジェクトのほんの一部だ、あるいは他のコードと混在した場合、あなたは運の外出ます。

これは~への拡張です マット・ジョイナーの答え.

コード全体にプラグマを生成したくない場合は、 _プラグマ演算子:

#ifdef __GNUC__
#  define DIAGNOSTIC_ERROR(w) _Pragma("GCC diagnostic error \"" w "\"")
#  define DIAGNOSTIC_IGNORE(w) _Pragma("GCC diagnostic ignore \"" w "\"")
#  define DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
#  define DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
#endif
// (...)

DIAGNOSTIC_ERROR("-Wuninitialized")
foo(a); // Error

DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE("-Wuninitialized")
foo(a); // No error

DIAGNOSTIC_POP
foo(a); // Error
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top