簡體   English   中英

抑制多個編譯器構建的警告

[英]suppress warnings on multiple compiler builds

是否有可以使用的通用抑制警告?

問題是有時我可能使用一個編譯器版本(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

不知道有沒有更簡單的方法? 另外我知道理想情況下我們都會使用相同的編譯器,但遺憾的是這不是一個選項。 只是試圖找到最簡單的方式來支持這樣的事情,並希望有一個更簡單的方法,然后在上面提到。

謝謝

沒有可移植的方法來做到這一點。 不同的編譯器以不同的方式執行它(例如#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語句優化UNUSED ,只考慮要使用的操作數。

GCC還有unused屬性`

// No warnings will be generated if x is otherwise unused
int x __attribute__((unused));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM