如何克服vc++;编写gcc和vc的通用代码时发出警告C4003++;

如何克服vc++;编写gcc和vc的通用代码时发出警告C4003++;,gcc,visual-c++,compiler-warnings,Gcc,Visual C++,Compiler Warnings,我有一个用gcc和vc++编译的代码。 该代码有一个公共宏,在两种情况下调用该宏 当我们向它传递一些参数时 当我们不想向它传递任何参数时 此类代码的一个示例是: #define B(X) A1##X int main() { int B(123), B(); return 0; } 编译预处理步骤的预期输出为: int main() { int A1123, A1; return 0; } gcc和vc++的输出与预期一致

我有一个用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'
    
    如何删除此警告并获得预期的输出


    谢谢。

    这可能会根据您的VC++版本等而起作用

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

    <>我不知道VC++是否会像一个空VA ARG,但它值得一试——让我知道它是否有效:

    对于VisualC++,你需要使用<强> > 您得到的警告是C4003(C=>编译器),4003=>警告号

    #pragma warning (disable: 4003)
    
    #define B(X) A1##X
    
    int main() {
            int B(123), B();
    
            return 0;
    }
    

    不确定GCC,但我怀疑您可以选择不为GCC定义此pragma并抑制警告(如果有其他方式)。

    感谢Stephen提供此解决方案,我知道这一点,但在问题中忘记了提及它。这是我正在考虑的最后一个解决方案(如果所有其他方法都失败了),我希望能够消除这个错误,而不是抑制它。再次感谢。谢谢山姆的回复。A我不太熟悉宏中的VAU参数,在应用此解决方案之前,我想先浏览一下相关文献。不幸的是,当我有其他未决任务时,我没有太多时间处理警告。我会很快给你回复的。再次感谢。当然,祝你好运,如果这有效或者你还有其他问题,请告诉我。