2012-03-19 72 views
11

我們正在C,C++和Java的代碼庫中進行一些代碼清理,修復簽名/無符號比較,運行靜態分析等。清理C/C++代碼揭示了可變宏的問題

一個我們得到的警告是

warning: ISO C does not permit named variadic macros 

及其配套警告

warning: ISO C99 requires rest arguments to be used 

現在,我用C99 standard variadic macro來解決這個問題的C代碼,但在C++代碼,什麼是正確的答案?使用相同的C99風格會產生不同的警告

warning: anonymous variadic macros were introduced in C99 

對於哪個我沒有看到任何答案。

我們在Linux中使用GCC(G ++)4.4.3。

我希望有一些標誌或其他方法,可以糾正,或禁用它爲特定的代碼段 - 但它這是在幾乎每一個文件中使用的日誌記錄...

+0

可能重複[是複雜的宏非標準?](http://stackoverflow.com/questions/4786649/are-variadic-macros-nonstandard) – 2012-03-19 17:59:38

+1

使用C++ 11。在你的GCC命令行上鍵入'-std = C++ 0x'或'-std = C++ 11'。或者只是忽略警告。 – 2012-03-19 18:02:27

+0

是的,使用c + + 11還沒有在卡中,它只是沒有得到很好的支持(尚未) – Petriborg 2012-03-19 18:04:45

回答

13

使用gcc選項-Wno-variadic-macros禁用該特定警告。

編輯:(從評論)

要禁用警告的一段代碼,但離開它一般,使用#pragma GCC diagnosticdescribed here。的

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wno-variadic-macros" 

    // Your code and/or include files 
    // (No variadic warnings here) 

#pragma GCC diagnostic pop 
+1

是否有一種方法可以禁用某段代碼的警告,但一般情況下保持不變?如果我使用這個,我該如何禁用'警告:ISO C99需要使用其餘參數' – Petriborg 2012-03-19 18:10:11

+1

@Petriborg:http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Diagnostic-Pragmas.html# Diagnostic-Pragmas – Hasturkun 2012-03-19 18:14:42

+0

謝謝@Hasturkun我會嘗試的 – Petriborg 2012-03-19 18:17:23