代码之家  ›  专栏  ›  技术社区  ›  Stowelly

具有n个参数的宏[重复]

  •  3
  • Stowelly  · 技术社区  · 16 年前

    可能重复:
    C/C++: How to make a variadic macro (variable number of arguments)

    我只是想知道这是否有可能。因此,与当前im如何处理带有多个参数的日志记录和消息不同,im必须为每种情况使用多个不同的宏,例如:

    #define MSG(             msg                                    )
    #define MSG1(            fmt, arg1                              )
    #define MSG2(            fmt, arg1, arg2                        )
    #define MSG3(            fmt, arg1, arg2, arg3                  )
    #define MSG4(            fmt, arg1, arg2, arg3, arg4            )
    #define MSG5(            fmt, arg1, arg2, arg3, arg4, arg5      )
    #define MSG6(            fmt, arg1, arg2, arg3, arg4, arg5, arg6)
    

    有没有办法只定义一个可以接受任意数量参数的宏?

    谢谢

    2 回复  |  直到 9 年前
        1
  •  2
  •   Gregory Pakosz    16 年前

    既然@GMan自己不想把这当作一个答案,那就看看吧 variadic macros 这是C99标准的一部分。

    你的问题是标签C++。变量宏不是C++标准的一部分,但大多数编译器都支持它们:GCC和MSVC++从MSVC2005开始。

        2
  •  2
  •   anon anon    16 年前

    下面是我用来生成异常的宏——不需要C++的当前宏不支持的变量宏:

    #define CSVTHROW( msg )         \
    {                                 \
        std::ostringstream os;         \
        os << msg;                     \
        throw CSVED::Exception(os.str());   \
    }                               \
    

    在使用中,它允许您说出以下内容:

    CSVTHROW( "Problem caused by " << x << " being less than " << y );
    

    您可以轻松地将throw语句替换为写入日志。