C++之宏定义
来源:互联网 发布:庞珣 知乎 编辑:程序博客网 时间:2024/05/21 13:35
1.宏定义需要注意到问题:
1、宏定义为#define ,不带分号。
2、预处理器将会把宏定义中的常数表达式计算成组中结果。
3、宏定义的整体和每一个参数都要用括弧。
因为宏定义中无论是整体还是参数都是在程序中直接展开(常数表达式计算出值后展开),所以必须加括弧。
比如#define SQUAR(n) n*n就会有问题,比如带入一个表达式:SQUARE(3+2);展开就是3+2*3+2,并非我们需要的结果。如果代入SQUARE(3+2)*5;展开就是3+2*3+2*5,面目全非了,这就是展开的问题所在。
所以宏定义为#define SQUARE(n) ((n)*(n))就好了。注意SQUARE和(之间不能有空格,宏定义的宏名和定义体分割点在第一个空格处。这样定义后,如果代入SQUARE(3+2)*5;展开就是((3+2)*(3+2))*5,完全没有问题。
上面的例子似乎不能证明整体的括弧的作用,我们看这个例子:
#define MUL_ADD(m,n) (m)+(n),能看出问题了吧,这个时候就会出问题了,其实根本就在于运算符号的优先级问题。比如带入MUL_ADD(3,2)*3;展开后就是3+2*3。
综合以上,宏的无论是参数还是整体定义都要用括弧小心的括起来。这样能保证展开还是一个整体而不受外部优先级更高的运算符干扰。
0 0
- Object-C之宏定义
- C语言之宏定义
- C语言之宏定义
- c语言之宏定义
- C语言宏定义之条件编译
- C 语言 之 预处理-------- 宏定义
- C语言笔记之宏定义
- c语言学习笔记之宏定义
- [c/c++]宏定义,#,##
- [c/c++]宏定义,#,##
- [c/c++]宏定义,#,##
- 【C语言】C语言之枚举定义和宏定义的技巧1
- C语言中预处理功能之宏定义
- C语言之#define用法(宏定义命令)
- C代码简洁之道-函数宏定义
- C语言基础之宏定义##连接符和#符
- C/C++中变量类型最值之宏定义
- C语言之#define用法(宏定义命令)
- QT中的界面跳转,事件处理过程思考
- 二维数组,二维vector的声明初始化,&传递(iter,模板,C99特性),iterator遍历
- 基础正则表达式(鸟哥的私房菜基础版第三版)
- HDU 4811 Ball(贪心)
- Struts2:处理一个form多个submit (3种方法)
- C++之宏定义
- BlueTooth: 无线技术之争谁将胜出 WiFi、蓝牙还是NFC?
- C/C++中extern用法
- 编程之美之字符串移位包含问题
- coursera Machine Learning Week3-1 学习笔记
- DAVINCI DM365-DM368开发攻略——RHEL6在VM7.1的安装1
- vtk学习笔记 --- 判断三角形相交
- gyb优化事项(1)
- 在 Adobe AIR 中为不同屏幕尺寸的多种设备提供支持