宏有n个参数

时间:2010-01-08 09:43:12

标签: c++ macros

  

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

只是想知道这是否完全可能。所以,而不是我当前如何处理具有多个参数的日志记录和消息,我必须为每种情况提供许多不同的宏,例如:

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

答案 0 :(得分:2)

好吧,因为@GMan自己不想把它作为答案,看看variadic macros这是C99标准的一部分。

您的问题虽然标记为C ++。 Variadic宏不是C ++标准的一部分,但大多数编译器都支持它们:从MSVC2005开始的GCC和MSVC ++。

答案 1 :(得分:2)

以下是我用来生成异常的宏 - 不需要C ++当前不支持的可变参数宏:

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

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

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

您可以使用对日志的写入轻松替换throw语句。