您的位置:首页 > 编程语言 > C语言/C++

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

2015-12-30 17:17 549 查看
X264代码中的一段出现了# 和 ##

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

供参考查阅的链接如下:

/detail/2496429020.html

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

/detail/2573058620.html

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

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

3. 对空格的处理

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

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

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

如:str=exapme( abc def); 将会被扩展成 str="abc def";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c C++ #