我有以下宏:为什么在使用__VA_ARGS__从宏调用函数时“vsprintf”卡住了?
#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()'? – augurar
你不应该在'__VA_ARGS__'之前使用'##';你不会将它粘贴到另一个字符串上。什么是'绿色',它应该是'绿色',?否则我不明白这一行。 –
@MattMcNabb ## __ VA_ARGS__是已知的扩展名,当__VA_ARGS__为空时可以去掉','符号。它实际上是正确的(但非标准)。 – keltar