讓我們考慮這樣的代碼:可變參數的功能問題
#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