プログラムのイベントをログに記録するために、この単純なマクロを使用しています。
#define _ERROR(format, args...) \
{ \
time_t t = time(0);\
struct tm * now = localtime( & t );\
fprintf(stderr, "[ERROR %d-%d-%d %d:%d:%d]: ",now->tm_year + 1900,\
now->tm_mon + 1, now->tm_mday,\
now->tm_hour, now->tm_min, now->tm_sec); \
fprintf(stderr, format , ## args);\
printf("\n");\
fflush(stderr);\
}
GCC と MinGW を使用して、Linux と Windows で問題なくコンパイルできます。MSVC 11 はコンパイルに失敗しますが。
注:以前の SO の質問に対するthisとthisの回答を理解するのに苦労しています。マクロや可変引数の数について何かが足りないと思います。そう:
- とは
__VA_ARGS__
? 私はそれを使用する必要がありますか? - MSVC でコンパイル可能なコードにのみ使用する必要がありますか?
__VA_ARGS__
これらのスタッフが不足しているため、上記のコードは間違っている/非標準/エレガントではありませんか?