宏
宏中的特殊符号
字符串化#
在宏中的参数前面使用#,参数会被预处理器转化为字符数组,即被转化为字符串,如#define exp1(s) printf("test s is:%s\n",#s); exp1(hello)
将打印字符串
注意:在转换字符串时会忽略前后的空格,传入的参数名间存在空格时会自动连接两个字符串,并保留中间的空格
符号链接##
将形式参数s转化为实际的形式参数xxx#s#xxx
- ##前后空格可有可无
- 形式参数名为已知宏定义和已定义参数名
- 在解析完#后解析##再进行宏展开(形式参数为宏阻止展开)
续行\
当宏无法在一行表达完整时,用\表示下一行继续宏定义
加上{}避免循环出错
在调用宏生成的两个函数加入while或if中时,会有一个不在语句块中,因此加入{}(但在加入{}后宏展开自动生成;,能编译运行但语法不对)