1. ホーム
  2. c++

[解決済み] 翻訳ユニットの一部に対してのみGCCの警告を選択的に無効にする。

2023-05-08 09:43:47

質問

これにもっとも近いGCCの等価物は何でしょうか? MSVC プリプロセッサのコードに最も近いものは何ですか?

#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で可能です。 はバージョン 4.6 以降、または trunk では 2010 年 6 月頃から可能です。

以下はその例です。

#pragma GCC diagnostic push
#pragma GCC diagnostic error "-Wuninitialized"
    foo(a);         /* error is given for this one */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
    foo(b);         /* no diagnostic for this one */
#pragma GCC diagnostic pop
    foo(c);         /* error is given for this one */
#pragma GCC diagnostic pop
    foo(d);         /* depends on command line options */