マクロ dbgprintf はデバッグ時に関数 printf() の代わりに利用すると便利なデバッグ出力用のマクロです。 // // dbgprintf( param-list ); // #ifdef NDEBUG #define dbgprintf 1 ? (void)0 : (void) #else // #ifdef NDEBUG #define dbgprintf printf #endif // #ifdef NDEBUG
マクロ NDEBUG が定義されていない場合、マクロ dbgprintf は関数 printf への単純な置換です。 printf( param-list );
マクロ NDEBUG が定義されている場合、マクロ dbgprintf は以下のように展開されます。 1 ? (void)0 : (void)( param-list );
上記でマクロ dbgprintf の定義が関数 printf への置換であるのは一つの例に過ぎません。 #define dbgprintf (get_print_proc( __FILE__, __LINE__ )) #define dbgprintf_t( __FILE__, __LINE__ )->print
上記2例は以下のように展開されます。 (get_print_proc( __FILE__, __LINE__ ))( param-list ); dbgprintf_t( __FILE__, __LINE__ )->print( param-list ); 関連
・assert マクロを使う | |