1

使用できる一般的な抑制警告はありますか?

問題は、あるコンパイラ バージョン (gcc) を使用してビルドする場合があり、その後、いくつかの一般的なものを使用するが別のコンパイラを使用するパートナーがいるということです。したがって、警告 # は異なります。

私が考えることができる唯一の方法は、ファイルで定義されたマクロを作成して、一般的な値を渡すことでした。

SUPPRESS_WARNING_BEGIN(NEVER_USED)
//code
SUPPRESS_WARNING_END

その場合、ファイルは次のようになります。

#if COMPILER_A
    NEVER_USED = 245
#endif

#if COMPILER_B
    NEVER_USED = 332
#endif


#define SUPPRESS_WARNING_BEGIN(x) /
     #if COMPILER_A
        //Compiler A suppress warning x
     #endif

     #if COMPILER_B
        //Compiler B suppress warning x
     #endif

#define SUPPRESS_WARNING_END /
     #if COMPILER_A
        // END Compiler A suppress warning
     #endif

     #if COMPILER_B
        // END Compiler A suppress warning
     #endif

もっと簡単な方法があるかどうか知りませんか?また、私たち全員が同じコンパイラを使用するのが理想的ですが、残念ながらそれはオプションではありません。このようなものをサポートする最も簡単な方法を見つけようとしているだけで、上記よりも簡単な方法があることを望んでいます。

ありがとう

4

1 に答える 1

3

それを行う移植可能な方法はありません。異なるコンパイラは異なる方法でそれを行います (例: #pragma warning#pragma GCC diagnosticなど)。

最も簡単で最善の方法は、どの警告レベルでもコンパイラで警告を生成しないコードを作成することです。

未使用の変数に関する警告を抑制することが目的の場合は、マクロを使用することをお勧めします。

#define UNUSED(x) ((void)sizeof(x))
...
void some_function(int x, int y)
{
    // No warnings will be generated if x is otherwise unused
    UNUSED(x);
    ....
}

演算子はコンパイル時に評価され、sizeofへのキャストは結果をvoid生成しないため、コンパイラはUNUSEDステートメントを何も最適化せず、オペランドが使用されると見なします。

GCC にはunused属性` もあります。

// No warnings will be generated if x is otherwise unused
int x __attribute__((unused));
于 2012-11-13T19:58:24.103 に答える