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 石川直太 無保証
C/C++ tips に[戻る]
Tips に[戻る]
石川直太のホームページに[戻る]