让我们考虑这样的代码:可变参数的功能问题
#include <stdio.h>
#include <stdarg.h>
#ifdef debug
#undef debug
#endif
#define debug(format, ...) tpk(format, __VA_ARGS__)
void tpk(const char* format, ...)
{
const unsigned int len = 1024;
char buffer[len];
va_list args;
va_start(args, format);
vsprintf(buffer, format, args);
va_end(args);
printf(buffer);
}
int main()
{
debug("No, you don't! ", "But I do! %d %s\n", 34, "blabla");
return 0;
}
需要考虑的事情:
我有一些代码调试,这就是为什么我要民主基金调试(请不要问我为什么,因为标题包含在项目中的方式有点搞砸了)。
不要担心缓冲区溢出等问题,这只是为了调试目的。
什么是不工作:
我只得到No, you don't!
消息,仅此而已。但是,如果我从debug
中删除第一个参数,则会很好地打印该消息。我在这里做错了什么?
更新:我犯了一个愚蠢的错误。我给出了一个没有格式参数的格式字符串,因此一切都按照它应该的那样工作。对于这个问题的解决,将是修改功能:
#define debug(str, format, ...) tpk(str, format, __VA_ARGS__)
打印STR和后的格式,使用可变参数的功能。
除了这样的printf会产生编译错误[: 哦,上帝...不是我看到错误。 – Melon