我有以下宏:

#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/

10-11 19:32