c/c++ 宏定义中的#/##

本文详细介绍了C++预处理器宏中#和##的使用方法及特性,包括参数转换、宏展开规则和空格处理等关键信息。

X264代码中的一段出现了# 和 ##

#define str(s) #s
#define xstr(s) str(s)

供参考查阅的链接如下:

http://www.cnblogs.com/mydomain/archive/2010/09/25/1834917.html

http://blog.sina.com.cn/s/blog_ad0672d60101eiib.html

http://www.cnblogs.com/wangzijing/archive/2013/02/28/2937774.html

1.  在一个预处理器宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组。

2. 如果##后的参数本身也是一个宏的话,##会阻止这个宏的展开,也就是只替换一次。

3. 对空格的处理

    a.  忽略传入参数名前面和后面的空格

    如:str=example1(   abc ); 将会被扩展成 str="abc"

    b.  当传入参数名间存在空格时,编译器将会自动连接各个子字符串,用每个子字符串中只以一个空格连接,忽略其中多于一个的空格

    如:str=exapme( abc    def); 将会被扩展成 str="abc def";



转载于:https://my.oschina.net/wellsoschina/blog/592740

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值