inline void LogMessage(int level, const char* format, ...)
{
Log* log = Log::Instance();
if (log->IsOpen() && log->GetLevel() <= level)
{
log->write(level,format, ##__VA_ARGS__);
log->flush();
}
}
log->write(level,format, ##__VA_ARGS__); 提示此处不需要#C++ 标识符 __VA_ARGS__ 只能出现在可变参数宏中的替换列表中
问题出现的原因: 因为 __VA_ARGS__
是一个预处理器宏标识符,它只能在预处理器宏中使用,而不能直接用在普通的函数调用中。
改进代码一:
#define LOG_BASE(level, format, ...) \
do {\
Log* log = Log::Instance();\
if (log->IsOpen() && log->GetLevel() <= level) {\
log->write(level, format, ##__VA_ARGS__); \
log->flush();\
}\
} while(0);
改进代码二:
inline void LogMessage(Log::Level level, const char* format, ...) {
Log* log = Log::Instance();
if (log->IsOpen() && log->GetLevel() <= level) {
va_list args;
va_start(args, format);
log->write(level, format, args);
va_end(args);
log->flush();
}
}