最近用到spdlog记录日志,组里的同事做了一层封装,做了自己的logger还用到了单例模式,然后对外接口写成了函数宏的方式,这样方便调用。
查了一些资料原来是继承了C语言中的函数宏和可变参数的写法。下面是简单的例子,感受一下。
函数宏示例
#include<stdio.h>
#define XNAME(n) x##n
#define PSQR(x) printf("the squre of " #x " is %d.\n", x*x);
#define PX(n) printf("x"#n" value is%d\n", x##n );
int main()
{
int x1 = 1;
int XNAME(3) = 3;
PX(3);
PSQR(1);
PSQR(2);
PSQR(4);
}
生成结果如下:
简单解释一下, ##的作用就是连接符, #的作用就是给某个变量前后加上双引号,变成字符串。
#define MACRO_FUNC(...) printf(__VA_ARGS__)
用三个点表示可变参数,__VA_ARGS__表示该可变参数,传递给实际执行的参数。
有问题欢迎留言
参考链接 详解宏定义(#define) - 知乎