总结
1、【__typeof】 也是一种预置的宏定义,取a的变量类型,定义新的变量__a,可以避免重复计算a++;
2、【##】具有链接作用,类似于
#define contact(a, b) a##b
#define contact(a, b) ab
允许我们传入空参数,使得预编译成功。(可以避免宏定义一个函数时,传入空参数预编译失败)
例如对于,printf("Hello World");
宏定义代码段中有这样一段代码——printf(frm, ##arg); ——后续代码arg若为空,预编译后得到可能大概是这样的代码——printf(frm, );——则能成功;
如果不加##——printf(frm, arg);——后续代码arg若为空,预编译则会报错;
3、宏定义一个《打印文件名,函数名,行数的函数》,通常用于检查错误结果位于哪个文件,函数和行数;
[19.og.cpp : main : 21] 123
[19.og.cpp : main : 22] Hello World
[19.og.cpp : main : 23] 23
可以用条件式编译来减少,查错完成后,注释掉一大段宏定义的麻烦操作。
启用的时候,去掉//#define DEBUG前面的注释符号“//”即可;
弄完了,把注释符号“//”添加回去即可;
4、
宏__FILE__以字符串形式返回所在文件名称
宏__func_以字符串形式返回所在函数名称
宏__LINE__以整数形式返回代码行号
5、
当遇到了具有完全相同性质的逻辑的时候,可以用函数封装起来,避免重复写同样冗长的逻辑;