dprintf tips
デバッグ時だけメッセージを表示したいということがしばしばあります。
しかし、次のように書くと、ソースファイルが繁雑になってしまいます。
#ifdef DEBUG
printf("hoge¥n");
#endif
if (debug_flag) {
printf("hoge¥n");
}
そこで、デバッグ時だけメッセージを表示し、そうでない場合は何もしない関数
dprintf()
を作りました。
引数の書式は、printf()
と同じです。
もう一つの機能として、画面に表示したデバッグメッセージと同じものを、
debug-process_id.log
というファイルに記録します。
#include <unistd.h>
#include <stdio.h>
#include <assert.h>
#include <stdarg.h>
int debug_flag = 0;
int dprintf(const char *format, ...)
{
int ret = 0;
va_list ap;
va_start(ap, format);
ret = dvprintf(format, ap);
va_end(ap);
return ret;
}
int dvprintf(char const *format, va_list ap)
{
int ret = 0;
if (debug_flag) {
static FILE *logfile;
if (logfile == NULL) {
char ctmp[256];
sprintf(ctmp, "debug-%ld.log", (long)getpid());
logfile = fopen(ctmp, "w");
assert(logfile != NULL);
}
vfprintf(stdout, format, ap);
ret = vfprintf(logfile, format, ap);
fflush(logfile);
}
return ret;
}
sourceforge.jpにもソースファイルを置いてあります。次のコマンドで、私が作ったライブラリー一式を取り出せます。
cvs -d:pserver:anonymous@cvs.sourceforge.jp/cvsroot/ecell2d co naota-lib
(C) 2003 石川直太 無保証