c/c++中的变参数使用示例

2022-08-28  本文已影响0人  牛奶言兼

在上一篇初探TCP链路的示例代码中,一开始没搞定日志的变参数传递问题,采用了不够优雅的方式进行处理,代码为:

#define LOG(fmt, ...) printf("file:%s, line:%d  ", __FILE__, __LINE__); \
    printf(fmt, ##__VA_ARGS__); printf("%s", "\n");

参考:

替换文本宏 - cppreference.com
文本替换宏 - cppreference.com

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

待补充

上一篇下一篇

猜你喜欢

热点阅读