宏定义中的参数需要加括号的原因
2012-08-29 10:29
162 查看
加括号是为了处理表达式参数(即宏的参数可能是个算法表达式)时不出错,因为宏替换就是文本替换,所以如果有以下情况:
#define COM(A,B) (A)*(B)
那么COM(6+5,3)这个调用会怎么替换呢?它会换成这样:
(6+5)*(3)
显然这是和COM宏的意图一致的,但是如是去掉了定义中括号,即写成这样:
#define COM(A,B) A*B
那么COM(6+5,3)这个调用会怎么替换呢?它就会换成这样:
6+5*3
这样显然就和宏的意图不符合了。
#define COM(A,B) (A)*(B)
那么COM(6+5,3)这个调用会怎么替换呢?它会换成这样:
(6+5)*(3)
显然这是和COM宏的意图一致的,但是如是去掉了定义中括号,即写成这样:
#define COM(A,B) A*B
那么COM(6+5,3)这个调用会怎么替换呢?它就会换成这样:
6+5*3
这样显然就和宏的意图不符合了。
相关文章推荐
- 带参数的宏定义应该怎么写,参数不能加括号
- 宏定义:给传入参数加括号,给最后生成的表达式加括号 floatToInt()四舍五入
- 宏定义函数指针类型&函数返回左值类值 1。宏定义不分配内存,变量定义分配内存。 2。宏名和参数的括号间不能有空格 3。宏替换只作替换,不做计算,不做表达式求解 //下面是正确的标准的写法 typedef int(FUNC1)(int in); ty
- linux c 定义打印时间/文件名/行/函数日志的可变参数宏定义,如果需要的话可以参考
- 宏参数加括号的原因
- 分享一段JS,查站长参数爱站参数多的朋友想必很需要
- JAVA方法中的参数用final来修饰的原因
- 在xml文件中配置数据库url需要带多个参数的时候IDE提示The reference to entity "characterEncoding" must end with the ';'
- 如果32程序非要获取64位的注册表需要在打开键时,添加参数KEY_WOW64_64KEY。
- 安装oracle时还需要修改的几个文件和参数
- 83 C语言带参数宏定义
- 需要inverse mapping的原因
- 需要参数 '@',但未提供该参数
- 需要友元的原因及使用
- py-faster-rcnn训练自己数据集需要修改的参数
- qt中宏定义及c++中不带参数宏定义
- 通过参数分配内存需要两层的指针,而通过返回值分配内存就只需要返回一层的指针.?
- 【UGUI】按钮需要绑定带参数的事件或绑定多个事件
- javaBean需要实现Serializable接口的原因
- 解决:C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”