フォーマット指定したテキストをストリームへ書き込みます。
備考 | CS+が提供するデバッグ機能では,サポートされていません。 |
[所属]
標準ライブラリ
[指定形式]
#include <stdio.h>
int vfprintf(FILE *stream, const char *format, va_list arg);
[戻り値]
出力された文字数を返します。
[詳細説明]
argの指す引数列にformatの指す文字列で指定された書式を適用し,それにより出力された書式付きデータをstreamに出力します。streamに指定できるのは,標準入出力のstdoutとstderrだけです。formatの記述方法はsprintfと同様です。本関数は,可変個数実引数並びをargで置き換えたfprintfと等価です。本関数の呼び出しの前に,va_startでargを初期化しておく必要があります。
[注意事項]
streamにstdout(標準出力), stderr(標準エラー)を指定します。ストリームの入出力先はI/Oアドレスなど1メモリ・アドレスを割り当てます。デバッガとの連携でこれらのストリームを使用するには,stdio.hファイルで定義されている,ストリーム構造体の初期値設定が必要です。関数を呼び出す前に,初期値設定を行ってください。
【stdio.hにおけるストリーム構造体の定義】
typedef struct {
int mode; /*with error descriptions*/
unsigend handle;
int unget_c;
} FILE;
typedef int fpos_t;
extern FILE* _REL_stdin();
extern FILE* _REL_stdout();
extern FILE* _REL_stderr();
#define stdin (_REL_stdin())
#define stdout (_REL_stdout())
#define stderr (_REL_stderr())
|
構造体の第一メンバmodeは,入出力状態を示します。ACCSD_OUT/ACCSD_INとして内部定義されています。第三メンバunget_cは,押し戻し文字(stdinのみ)を示し,-1として内部定義されています。
-1の場合,押し戻し文字“なし”を表します。第二メンバhandleは,入出力I/Oアドレスを示します。handleには,使用するデバッガで決められている値を設定してください。
【入出力I/Oアドレス設定例】
stdout->handle = 0xfffff000;
stderr->handle = 0x00fff000;
stdin->handle = 0xfffff002;
|
[使用例]
#include <stdio.h>
void func(int val) {
fprintf(stdout, "%-10.5x\n", val);
}
/*汎用のエラー報告ルーチンにおける使用例*/
void error(char *function_name, char *format, ...) {
va_list arg;
va_start(arg, format);
fprintf(stderr, "ERROR in %s:", function_name); /*エラーが発生した関数名を出力*/
vfprintf(stderr, format, arg); /*残りのメッセージを出力*/
va_end(arg);
}
|