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
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
相关文章推荐
- Caffe C++API 提取任意一张图片的特征系列一----ImageData
- C++项目中的extern "C" {}
- 图的表示方法C++实现
- LeetCode(46): Permutations (C++)
- C++中常量引用(const reference)
- C++中四种变量
- C++模板
- C++ 学习(友元, 异常, 其他)
- c++删除文件
- C++实现红黑树建立,销毁,查找,插入和删除
- C++实现哈希表的创建,销毁,键值插入与删除
- C++builder 数据库常用操作
- 个人学习c++的真实经验
- C/C++中位运算杂谈
- [C/Cpp/Java]编程语言的一些通用概念
- c语言:编写一个简易计算器,打印菜单界面,实现加减乘除运算,可以退出菜单界面
- c语言:从键盘输入BOY三个字符,然后把它们输出到屏幕。
- c语言:先后输出BOY三个字符
- c语言:用%f输出实数,只能得到6位小数及求float型数据的有效位数
- c语言:求一元二次方程的跟,系数a,b,c由键盘输入(要求考虑所有情况)