基本的に次のことを行うヘルパー関数log
が欲しいのですが。
_log(file, "array has %d elements\n", 10);
// writes "2014-02-03 16:33:00 - array has 10 elements" to &file
_
time の部分がダウンしていて、ファイルの書き込みの部分がダウンしています。ただし、問題はlog
のメソッドシグネチャ自体です—何を入力すればよいですか? This は、printf
宣言が_...
_キーワードで終わることを示していますが、これを関数で使用するにはどうすればよいですか?
_void log(FILE *f, const char * format, ...) // how would I pass ... to fprintf?
_
これを[〜#〜]編集[〜#〜]して、もう少し情報を含めましょう。
「2014-02-0316:33:00」という形式の文字列を返すconst char * now ()
があります。このように別のフォーマット文字列を渡したいのですが。 2つのステートメントは同等である必要があります。
_log(file, "array has %d elements\n", 10);
fprintf(file, "%s - array has %d elements\n", now(), 10);
_
vfprintf
で_va_list
_を渡すことができることは知っていますが、now()
を最初の引数before他のすべて?
次のように宣言されているvprintf
を使用します。
int vprintf(const char *format, va_list ap);
log
関数で、va_start
を呼び出してva_list
値を取得し、その値をvprintf
に渡します。
log
関数はFILE*
引数を取るので、おそらくvfprintf
ではなくvprintf
を使用することをお勧めします(そして、おそらくfprintf
ではなくprintf
について質問するように質問を更新してください)。
ちなみに、log
という名前の使用を再検討することをお勧めします。これは、<math.h>
で宣言されている標準関数の名前です。
更新された質問を反映して、log
を直接呼び出すことにより、fprintf
内にタイムスタンプを出力できます。
va_list(args);
fprintf(f, "%s - ", now());
va_start(args, format);
vfprintf(f, format, args);
あなたが探している方法はvfprintf
または可能なvprintf
です(あなたの質問ではどちらか不明です)
これは基本的にprintf
の実装であり、va_list
をパラメーターとして明示的に渡すことができます。したがって、メソッドでは、メソッドパラメータ用にva_list
を作成し、それをvfprintf
に転送できます。
void log(FILE* f, const char* format, ...) {
va_list args;
va_start (args, format);
vfprintf (f, format, args);
va_end (args);
}