C言語のデバッグ用printf

ALL
スポンサーリンク

C言語のデバッグ用printfです。

表示と同時に、同じ内容をファイルにも出力しますので、表示内容が多い場合に役立ちます。
また、デバッグが完了して不要になったら、デバッグ用ルーチンの呼び出し自体を簡単に無効化できるので、成果物にデバッグ用の無駄なコード混入もありません。

まず、コードに以下を追加します。

     :
#include <stdarg.h>
     :
#define DPRINT  dprint
     :
void dprint( char *format , ...  ){
    static FILE *fp = NULL;
    static bool init = 0;
    char buf[1024];
    va_list ap;
  
    if( init == 0 ){
        fopen_s( &fp , "debug.log" , "a" );
        init = 1;
    }
    va_start( ap , format );
    vsprintf_s( buf , 1024 , format , ap );
    printf( buf );
    if( NULL != fp ){
        fprintf( fp , buf );
    }
    va_end(ap);
    return;
}

その後、printf と同じように、DPRINT()を使用します。
書式文字列は、printf と同じものが使えます。

DPRINT( "%d + %d = %d\n" , 1 , 2 , 1+2 );
DPRINT( "%lf + %lf = %lf\n" , 0.1 , 0.7 , 0.1+0.7 );
DPRINT( "%s\n" , "Hello!" );

画面表示とともに、同じ内容が debug.log にも出力されます。

デバッグが完了して、表示/ファイル出力が不要になったら、以下のようにするだけで、デバッグ用ルーチンの呼び出し自体を無効化します。

#define DPRINT

コメント