在上一篇初探TCP链路的示例代码中,一开始没搞定日志的变参数传递问题,采用了不够优雅的方式进行处理,代码为:
#define LOG(fmt, ...) printf("file:%s, line:%d ", __FILE__, __LINE__); \
printf(fmt, ##__VA_ARGS__); printf("%s", "\n");
参考:
c变参数宏的说明
于是,优雅的日志简单封装为:
void my_log(const char* file, int line, const char* fmt, ...) {
va_list args;
printf("file:%s, line:%d ", file, line);
va_start(args, fmt);
vprintf(fmt, args); // 函数定义int vprintf(const char * __restrict, va_list);
va_end(args);
printf("%s", "\n");
}
#define LOG(fmt, ...) my_log(__FILE__, __LINE__, fmt, ##__VA_ARGS__);
#__VA_ARGS__与##__VA_ARGS__的区别
clang
待补充
gcc
待补充
网友评论