变长参数__VA_ARGS__ 和 写日志的宏定义
宏定义带’#'字符的不同含义
带一个 ‘#’ 转化为字符串
#define _TOSTRING(x) #x
int main()
{
auto s1 = _TOSTRING(123);
std::cout << " s1 " <<s1 <<std::endl; // "123" 返回const char*
}
带两个 “##” 就是拼接(主要是跟 ##__VA_ARGS__一起用)
用于宏的替换部分,这个运算符把两个语言符号组合成单个语言符号,为宏扩展提供了一种连接实际变元的手段。也可以用作数字拼接吧,
不过要注意int的取值范围,我用这个宏去替换(连接两个字符串)会报错,是错误的参数,至于为啥返回int,我还没搞明白,如果有人知道告
诉我一下
#define CONNECT_TWO(x,y) x##y
int main()
{
auto s2 = CONNT_TWO(123,456);
std::cout << " s2 " <<s2 <<std::endl; // 返回的是一个int的数字拼接,123456
}
定义日志宏
第一种:日志宏,注意一点:在define中如果是多行定义,需要加上符号 '\'