宏
#define 标识符(≥0个变量) 替换内容
#ifdef不能用于多个条件,因此可以将其用为#if defined(标识符)逻辑运算符(其他)
#if也有#elif
1 | |
因为只是普通的内容替换,因此可能产生很多别的意想不到的效果,因此一般要将其用do{}while(0)包起来,而如果需要返回值,则在最外层包裹一个lambda即可
#a 将a这个字符串用””包裹,并将其中的”加上转义字符。
a##b 将a和b连接,因为有的时候我们是要将输入和其他字符串拼在一起,因此,需要显式的告诉宏这个是一个变量而非一个和其他字符串连在一起的字符串
由于这些变量本身可能是表达式,如果和其他语句组合,可能会导致很多问题,所以版本都会现对这个表达式进行一个求值,如auto __x=x;因为__这个其他一般不用,所以变量名一般不会产生冲突。
变量本身也可以是…,也就是可以输入任意多个参数,用__VA_ARGS__表示。
用__VA_OPT__()包裹的文字当__VA_ARGS__不为空的时候才会使用,否则就为空。
宏
https://lhish.github.io/project/hide/宏/