#define 的"##","@","#"妙用

常见下面的一些#define的用法,很有意思啊。(网上看到,整理留存)

#define Conn(x,y)   x##y
#define ToChar(x)   #@x
#define ToString(x) #x


①"x##y"表示什么?

表示x连接y,举例说:

int  n = Conn(123,456);  //结果就是n=123456;
char* str = Conn("asdf", "adf"); //结果就是 str = "asdfadf";


②"#@x"

其实就是给x加上单引号,结果返回是一个const char。举例说:

char a = ToChar(1); //结果就是a='1';

做个越界试验:

char a = ToChar(123); //结果是a='3';
但是如果你的参数超过四个字符,编译器就给给你报错了!error C2015: too many characters in constant   :P

③"#x"

是给x加双引号

char* str = ToString(123132); //结果就是str="123132";


④宏替换的处理机制

请看下面的宏定义

#define f(a,b) a##b 
#define d(a)   #a 
#define s(a)   d(a) 

此时,宏替换分为两种情况(实质上就是嵌套宏优先级别的控制):
1.不以"#"开头的,先展开其参数宏,然后是再替换代码:

puts(s(f(a,b)));  //-->puts(s(ab))-->puts(d(ab))-->puts("ab") 

2.以"#"开头的,直接替换,不展开:

puts(d(f(a,b)));  //-->puts("f(a,b)") 

要善用,但千万别把自己绕晕了!疑问


整理后,又发现网上还有很好的参考资料,请挪步查阅:

1、C/C++宏的使用总结

2、C++中的宏替换




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值