如何在为gcc和vc ++编写通用代码时克服vc ++警告C4003

com*_*ugs 5 gcc compiler-warnings visual-c++

我有一个用gcc和vc ++编译的代码.代码有一个公共宏,在两个场景中调用.

  1. 当我们传递一些参数时.
  2. 当我们不想传递任何参数时.

这种代码的一个例子是:

#define B(X) A1##X

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

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译预处理步骤的期望输出是:

int main() {
        int A1123, A1;

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

gcc和vc ++的输出都是预期的,但vc ++会发出警告:

warning C4003: not enough actual parameters for macro 'B'
Run Code Online (Sandbox Code Playgroud)

如何删除此警告并获得预期输出?

谢谢.

Sam*_*ost 2

这可能取决于你的 VC++ 版本等

#define B(...)  A1##__VA_ARGS__
Run Code Online (Sandbox Code Playgroud)

我不知道 vc++ 是否会喜欢空的 va 参数,但它值得一试 - 让我知道这是否有效:)