原来宏定义可以这么玩

最近做一个公司项目,用到了一些宏定义的东东,发现了一个神奇的用法,故写日志纪念一下。

首先你需要知道C++宏定义的基本用法:

//拼接x和y  ##
#define Conn(x,y) x##y
//加上单引号  #@
#define ToChar(x) #@x
//加上双引号 #
#define ToString(x) #x
不解释,网上一大堆。


有了以上三个宏定义,我现在想拼接两个字符串 比如"dede" "shuaige" 编程 "dedeshuaige" 怎么做呢。

作为英明神武的dede想到了一招

ToString(Conn(dede,shuaige))
这样对吗?Of cause wrong。  通过printf 我们可以看到输出的是 Conn(dede,shuaige)。

So ,how can you sovle this problem?

德德,很帅气的想到一招,先不告诉你,看下面代码

#define A(x) "dede" //为啥加个(x)这东西,不解释
#define STRING1 A(x)A(x)
#define STRING2 A(x)A(x)A(x)A(x)
#define STRING3 "dede""shuaige"

用printf输出是啥子呢?

From the result , the follow information can be easily proved.

STRING1:"dededede"

STRING2:"dededededede"

STRING3:"dedeshuaige"

既然如此,我们的宏定义咋个写呢,因为要带变量,德德的第一想法是:

<span style="font-size:18px;"></span><pre name="code" class="cpp">#define Conn(x,y)  #x#y

 
Very good.  但是有个缺点啊 Conn(x,y)中x和y只能是一个不加双引号的字符串例如。 

正确使用:Conn(dede,shuaige)

错误使用:Conn("dede","shuaige")

So 依然感觉有点多不足,个人感觉Conn("dede","shuaige")要爽一点。

经过千险万难,不多说了,直接开代码:

#define Conn(x,y) x""y

为了让宏把xy识别成x和y中间加个空串就OK了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值