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

C语言宏定义中#和##的作用

2015-12-01 10:15 507 查看
在宏定义中#和##的作用是:前者将宏定义的变量转化为字符串;后者将其前后的两个宏定义中的两个变量无缝拼接在一起转化为字符串。

1. #: 在宏定义中,将其后的变量,转化为字符串。

eg: #define str(s) #s

输出: helloworld , 就可以通过这样的的调用, printf( str(helloworld) );

2. ## : 在宏定义中,将其前后的两个变量拼接在一起。

eg: #define v(a,b,c,d) 0xa##b##c##d

//将四个字节的十六进制的数据转化为一个十六进制的整型数据

int a = v(CF,AB,B0,BC); // 即 a = 0xCFABB0BC

3. 两者的共性: 能够阻止宏定义的递归展开。可以通过中间的转换的宏,来实现参数宏的展开。

测试例子:

?
测试结果:

?

实际应用

使用#和##宏符号的作用定义最简单的日志接口,如下:

?
?
这个宏可以很方便地替换在项目中使用的正式日志接口,用来保持模块的独立性,便于模块的测试。

文章摘自:http://my.oschina.net/shelllife/blog/123202
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: