在宏定义中经常看到#和## 现在讲一下他们的用法
1,##是连接符:用于将两个参数连接在一起
例如:#define A(X, Y) X##Y
则 A(HE ,LLO) 结果是HELLO
#define LINK(A) MY##A
则 LINK(GOD)
相当于
>MYGOD
“##”是一种分隔连接方式 他的作用是先分隔 然后强制连接 分隔作用相当于空格
例:试比较下列宏定义的区别
例1 #define A1(name,type) type name_##type##_type
例2 #define A2(name, type) type name##_##type##_type
A1(a,int);相当于int name_int_type;
A2(a, int);相当于int a_int_type
在第一个宏定义中##把name_##type##_type分成了三段 name_、 type、 _type 只有type是前面出现过的 所以它可以被替换
在第一个宏定义中##把name##_##type##_type分成了四段name、_、type、_type name 和type是前面出现过的 所以它们可以被替换
2,#是“字符串化”的意思 用在宏定义中表示将#后面的参数转换成字符串
例:#define STRCPY(X ,Y) strcpy(x,#y)
则:strcpy(buff,abc)
相当于 strcpy(buff,“abc”)