需求

在 Linux 平台下运行程序时,需要通过 syslog 打印日志,syslog 本身是可变参数的函数,所以需要一个可变参数的宏来定义在 linux 平台下的函数。

解决

  • C++ 中,可变参数宏的写法是: #define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__), 满足需求的代码如下:
    #ifdef Q_OS_LINUX
    #define LOG(priority, format, ...)  syslog(priority, format, ## __VA_ARGS__)
    #else
    #define LOG(priority, format, ...)
    #endif
    
  • C 中,写法是: #define debug(format, ...) fprintf(stderr, fmt, __VA_ARGS__)
  • GCC 中,写法是: #define debug(format, args...) fprintf (stderr, format, args)

参考

不定参数的宏 函数

整理:C/C++可变参数,“## __VA_ARGS__”宏的介绍和使用

c/c++巧用宏计算不定参数个数【不定参数】【宏】【#define】