我有以下宏:
#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?
问候。
最佳答案
您添加 %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/