在C语言中宏定义#define 是一个很有用处的一个特性,在看其它一些源码的时候宏定义#define中会出现一些特殊的符号,主要有# ## do{}while(0),这里记录以下这几种特殊符号的含义和用法
1,# 字符串化操作符
可以将宏定义中传入的参数转换成用一对双引号括起来的字符串
| 1 | 
 | 
2,##符号连接符
将宏定义中的多个参数连结成一个参数
| 1 | 
 | 
3,do{}while(0)
- 不需要do{}while(0)的情况 - 1 
 2
 3
 4
 5
 action2(x);
 if (NULL == p)
 TEST(p);
 // 在这种情况下会出现action1()会执行,action2()不会被执行的情况
- 仅仅使用{}的情况 - 1 
 2
 3
 4
 5
 if(x > y)
 SWAP(x y);
 //这种情况下编译直接报错了,因为多了一个`;`
* 如有疑问欢迎批评指正,谢谢! *