C
C++
Objective-C

Macro(#define)に可変引数を渡す方法

More than 5 years have passed since last update.



マクロ定義

こうしとけばログ出力マクロをDEBUGフラグだけでON/OFF切り替えできる。

マクロのコール側で意識しなくても, 関数名・行数なども表示できる。


hogehoge.h

#ifdef DEBUG

#define LOG_PRINT(...) log_print(__FUNCTION__, __LINE__, __VA_ARGS__)
#else
/* DEBUG */
#define LOG_PRINT(...)
#endif
/* DEBUG */

下記はログ出力関数の実態イメージ。


hogehoge.c


void log_print(char* func, int line, const char* format, ...)
{
va_list arg;

:
fprintf(stdout, "[%s:%d] ", func, line);
vastart(arg, format);
vsprintf(stdout, format, arg);
return;
}