2010-03-03 66 views
4

我有一個編譯爲gcc和vC++的代碼。代碼有兩個場景中調用的通用宏。如何在爲gcc和vC++編寫通用代碼時克服vC++警告C4003

  1. 當我們傳遞一些參數給它。
  2. 當我們不想傳遞任何參數。

的這樣的代碼的一個例子是:

#define B(X) A1##X 

int main() { 
     int B(123), B(); 

     return 0; 
} 

的期望從編譯的預處理步驟輸出爲:

int main() { 
     int A1123, A1; 

     return 0; 
} 

對GCC和VC++的輸出是作爲預計,但vC++發出警告:

warning C4003: not enough actual parameters for macro 'B' 

我該怎麼辦刪除此警告並獲得預期輸出?

謝謝。

回答

2

這可能取決於你的VC++版本的工作,等

#define B(...) A1##__VA_ARGS__

我不知道VC++會喜歡一個空VA ARGS但它值得一試 - 讓我知道,如果工程:)

+0

感謝山姆的迴應。我不熟悉宏中的VA_ARGS,並希望在應用此解決方案之前閱讀文獻。 不幸的是,當我有其他未決任務時,我沒有多少時間處理警告。我會盡快回復您。 再次感謝。 – compbugs 2010-03-12 11:32:52

+0

當然,祝你好運,讓我知道如果這個工程或如果你有任何進一步的問題。 – 2010-03-12 13:59:05

1

對於Visual C++,您需要使用#pragma警告指令。 你得到的警告是C4003(C => Compiler),4003 =>警告號碼。

#pragma warning (disable: 4003) 

#define B(X) A1##X 

int main() { 
     int B(123), B(); 

     return 0; 
} 

不確定GCC,但我懷疑,你可以選擇不定義此編譯GCC和抑制警告(如果有一些其他的方式)。

+0

感謝史蒂芬爲這個解決方案,我意識到這一點,忘記在問題中提到它。 這是我想到的最後一個解決方案之一(如果一切都失敗了),我希望能夠消除這個錯誤的東西,而不是壓制它。 再次感謝。 – compbugs 2010-03-12 11:32:05