在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);
//这种情况下编译直接报错了,因为多了一个`;`
* 如有疑问欢迎批评指正,谢谢! *