c/c++ 宏定义中的#/##
2015-12-30 17:17
549 查看
X264代码中的一段出现了# 和 ##
供参考查阅的链接如下:
/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";
#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";
相关文章推荐