关于宏定义
2013-06-19 00:00
127 查看
1、宏定义要加括号的原因?
例如定义一个宏:
因为宏定义在预处理阶段是内容严格的替换,如果调用div(a+b,y),替换后就成了a+b*y;不是我们想要的结果(a+b)*y,所以宏的定义,特别是当做函数的宏定义,应该定义为
2、宏定义中的# 、##
#作用是把后面的宏参数转化为字符串,如
例如定义一个宏:
<!-- lang: cpp --> #define div(x,y) x*y
因为宏定义在预处理阶段是内容严格的替换,如果调用div(a+b,y),替换后就成了a+b*y;不是我们想要的结果(a+b)*y,所以宏的定义,特别是当做函数的宏定义,应该定义为
<!-- lang: cpp --> #define div(x,y) (x)*(y)
2、宏定义中的# 、##
#作用是把后面的宏参数转化为字符串,如
<!-- lang: cpp --> #define STR(s) #s printf(STR(neo)); //输出为neo;
的作用表示自然连接
<!-- lang: cpp --> #define STR(s,s1) #s###s1 printf(STR(neo,hellow)); //输出为neohellow;
相关文章推荐
- OpenCV学习笔记(3)关于一个宏定义
- PCLint 帮助中关于如何获得gcc/g++编译宏定义和头文件搜索目录的方法说明
- 关于编程时IO口的宏定义、画原理图时IO口网络标签的命名;
- 关于宏定义
- linux内核中的一些关于中断的宏定义
- 关于stm32程序的宏定义以及源文件管理
- 关于宏定义
- 关于宏定义
- 关于iOS开发真机,模拟器的一些宏定义
- 关于宏定义 do……while(0) 定义多条语句
- 关于C/C++中宏定义的一些新认识
- 关于shellapi.h/shlobj.h头文件和宏定义冲突
- 关于函数式宏定义的典型用法及易错点
- 关于define宏定义
- 关于linux中DBG宏定义的使用总结
- ARM编程:关于ARM寄存器的宏定义
- [转] 关于VS中区分debug与release,32位与64位编译的宏定义
- 关于Linux Kernel中的宏定义likely和unlikely
- 关于Linux Kernel中的宏定义likely和unlikely
- 关于宏定义