【发布时间】:2014-03-14 03:31:00
【问题描述】:
我有以下宏:
#define TRACE__LOW(str, col, ...)\
TR_Trace("\r\e[" COLOR(col) "%s :: %s():%d; LOW - " str "\e[0m\r\n",\
##__VA_ARGS__);
而函数 TR_Trace 看起来像这样:
void TR_Trace(const char *const string, ...)
{
va_list aptr;
size_t stringSize = 0;
char tempString[250];
va_start(aptr, string);
vsprintf(tempString, string, aptr);
va_end(aptr);
}
我是这样使用它的:
TRACE__LOW("Led[%d] toggled every %d milliseconds (%5d)", GREEN
init_parameters.led, delay_time, counter++);
这里的问题是一旦执行到 vsprintf(tempString, string, aptr); 就会卡在那里。
有人知道发生了什么或者我没有正确使用 VA_ARGS?
问候。
【问题讨论】:
-
“卡住”是什么意思?另外,您的意思是使用
vprintf()而不是vsprintf()? -
你不应该在
__VA_ARGS__之前使用##;您没有将其粘贴到另一个字符串上。什么是GREEN,它应该是GREEN,吗?否则我不明白那行。 -
@MattMcNabb ##__VA_ARGS__ 是在 VA_ARGS 为空时摆脱
,符号的已知扩展。它实际上是正确的(但不标准)。
标签: c c-preprocessor variadic-functions variadic-macros