2010-03-03 76 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