我有以下宏:
#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),它就会被卡在那里。
有人知道发生了什么事,或者我没有正确地使用虚拟参数吗?
当做。
最佳答案
将%s :: %s():%d;
添加到格式字符串中,但不添加额外的参数来填充这些模式。
我想应该是
#define TRACE__LOW(str, col, ...)\
TR_Trace("\r\e[" COLOR(col) "%s :: %s():%d; LOW - " str "\e[0m\r\n",\
__FILE__, __func__, __LINE__,\
##__VA_ARGS__);
关于c - 使用__VA_ARGS__从宏调用函数时,为什么“vsprintf”会卡住?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22395604/