Everything

vfprintf


フォーマット指定したテキストをストリームへ書き込みます。

備考

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_startargを初期化しておく必要があります。

[注意事項]

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);
}