C宏高级应用之##/#

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值