そのようなコードを考えてみましょう:
#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;
}
考慮事項:
デバッグするコードがいくつかあります。そのため、デバッグを undef にする必要があります (ヘッダーがプロジェクトに含まれる方法がめちゃくちゃなので、理由を聞かないでください)。
バッファ オーバーフローなどについて心配する必要はありません。これはデバッグのみを目的としています。
機能していないもの:
私はNo, you don't!
メッセージを受け取るだけで、それだけです。ただし、メッセージから最初の引数を削除すると、debug
うまく出力されます。ここで何が間違っていますか?
更新: 私はばかげた間違いを犯しました。書式設定パラメーターを持たない書式文字列を指定するため、すべてが正常に機能します。これに対する解決策は、関数を変更することです。
#define debug(str, format, ...) tpk(str, format, __VA_ARGS__)
str を出力し、その後 format で可変引数関数を使用します。