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

时间:2010-03-03 11:52:11

标签: gcc visual-c++ compiler-warnings

我有一个用gcc和vc ++编译的代码。 代码有一个公共宏,在两种情况下调用。

  1. 当我们传递一些参数时。
  2. 当我们不想传递任何参数时。
  3. 此类代码的一个示例是:

    #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 个答案:

答案 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并禁止警告(如果有其他方式)。