デバッグ用の出力関数
最近の gcc だと、可変長引数マクロを使っても特に警告を出さないようです. そこで、以下のようなマクロを定義しておくと、デバッグメッセージのON/OFFが手軽にできて便利です.
#ifdef __DEBUG__ #define dprintf(fmt,...) \ printf("[%s]%d:" fmt "\n",__FUNCTION__,__LINE__,__VA_ARGS__) #define dputs(str) \ printf("[%s]%d:" str "\n",__FUNCTION__,__LINE__) #else #define dprintf(fmt,...) while(0){} #define dputs(str) while(0){} #endif
これを使ったサンプルプログラムです.
//ここで ON / OFF を切り替える //#define __DEBUG__ main() { int data=10; dputs("hoge"); dprintf("data %d",data); }
#define __DEBUG__ が定義されている場合は、
main() { int data=10; printf("[%s]%d:" "hoge" "\n",__FUNCTION__,20); printf("[%s]%d:" "data %d" "\n",__FUNCTION__,21,data); }
のように展開されるため、デバッグメッセージが改行/ファイル名/行番号込みで出力されます. 一方、#define __DEBUG__ を定義していない場合は
main() { int data=10; while(0){}; while(0){}; }
と展開されるため、メッセージは出なくなります.