可能重复:
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)
有没有办法定义一个可以接受任意数量参数的宏?
感谢
答案 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语句。