我有一个用gcc和vc ++编译的代码。 代码有一个公共宏,在两种情况下调用。
此类代码的一个示例是:
#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'
如何删除此警告并获得预期的输出?
感谢。
答案 0 :(得分:2)
这可能会起作用,具体取决于您的VC ++版本等
#define B(...) A1##__VA_ARGS__
我不知道vc ++是否会像空的va args那样值得一试 - 请告诉我是否有效:)
答案 1 :(得分:1)
对于Visual C ++,您需要使用 #pragma warning 指令。 您收到的警告是C4003(C =>编译器),4003 =>警告号码。
#pragma warning (disable: 4003)
#define B(X) A1##X
int main() {
int B(123), B();
return 0;
}
不确定GCC,但我怀疑您可以选择不为GCC定义此pragma并禁止警告(如果有其他方式)。