【发布时间】:2018-12-03 20:24:32
【问题描述】:
#define TRACE2(args) TraceDebug args;
void TraceDebug ( const char * format, ... );
void TraceDebug ( const char * format, ... )
{
static char buffer[256];
va_list args;
va_start (args, format);
vsprintf (buffer,format, args);
va_end (args);
}
int main(void)
{
TRACE2(("ece %d is of %d students.", 1,33));
return 0;
}
预期的输出是ece 1 is of 33 students. 为什么输出屏幕是空白的?
【问题讨论】:
-
你填充了缓冲区,但你没有对它做任何事情,也许只是一个 printf("%s\n", buffer);不见了?
-
旁注:你应该更喜欢
vsnprintf而不是vsprintf以避免意外的缓冲区溢出,尤其是因为调用者看不到缓冲区大小。 -
你的宏没什么意义,你可以像
TraceDebug("ece %d is of %d students.", 1, 33)一样直接调用你的函数 -
@ChrisTurner 这种技术可以更轻松地通过切换单个定义来启用或禁用调试
标签: c printf variadic-functions