C宏高级应用之##/#

来源:互联网 发布:qq点亮图标软件 编辑:程序博客网 时间:2024/05/25 23:25

在宏定义中经常看到#和## 现在讲一下他们的用法

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”)

0 0
原创粉丝点击