C/C++宏参数
来源:互联网 发布:ios数组动态添加元素 编辑:程序博客网 时间:2024/06/06 09:49
一、定义
带参数的宏指令定义起来和函数很像,你只需要在宏名称后面的一对括号中插入参数,当然,参数必须是合法的C标识符,用逗号隔开,空格可加可不加。
如:
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
二、调用
带参数的宏指令调用起来也和函数差不多,写下宏名称和紧跟其后的参数列表即可,调用时插入的参数个数要和定义中参数个数一样,当宏指令开始替换时,宏体内的参数都会被相关的变量替代,在宏体内不一定要使用全部的参数。
如:
x = min(a, b); ==> x = ((a) < (b) ? (a) : (b)); y = min(1, 2); ==> y = ((1) < (2) ? (1) : (2)); z = min(a + 28, *p); ==> z = ((a + 28) < (*p) ? (a + 28) : (*p));
三、注意事项
- 向宏中传入的每个参量前后的空白符都会被去掉,一个参量中的所有空白符都会被替换成一个空格。
- 每个参量中的前后园括号数要平衡,在圆括号中的逗号并不会表示参量的结束。
- 不要求方括号前后平衡,而且它们不能防止逗号分隔参量。例如:
macro (array[x = y, x + 1])
,这里给macro传入了两个参量array[x = y
和x+1]
,如果你想将array[x = y, x + 1]
作为一个参量来使用,你可以这样写array[(x = y, x + 1)]
,这和C语言一样。 - 宏替换会做两次,例如
min (min (a, b), c)
会先被替换成min (((a) < (b) ? (a) : (b)), (c))
,然后被替换成((((a) < (b) ? (a) : (b))) < (c) ? (((a) < (b) ? (a) : (b))) : (c))
,详见Argument-Prescan - 你可以留空宏参数,对于与处理器来说这不是一个错误,但很多宏展开后会变成不合语法的代码
- 宏参数以字符串字面值形式出现时并不会被相关参量替换。
例:
#define foo(x) x, "x"
foo(bar) ==> bar, "x"
0 0
- C可变参数宏
- C宏 可变参数
- 可变参数宏.c
- C 可变参数宏
- C/C++宏参数
- C语言宏参数
- c#---参数
- C/C++--参数传递
- 【C/C++】命令行参数
- c 宏使用变长参数
- C语言可变参数宏
- C/C++可变参数宏
- C语言 可变参数宏
- c语言可变参数宏
- <C++> 可变参数宏定义
- C 参数可变宏使用
- [c/c++]函数参数缺省值
- [c/c++]函数参数缺省值
- 缓存实例的不可变类:
- Transform / Transition / Animation 区别
- iWebShop 二次开发之商城后台模板渲染流程
- MySql命令大全
- C++static
- C/C++宏参数
- C++的输入和输出与标准输出流
- 抽象类:
- Web前端面试指导(二):编写简历,吃透简历内容
- Android通知栏微技巧,那些你所没关注过的小细节
- Android 常用布局及基本UI控件
- Jquery plugin制作:浮动树菜单
- JavaCC使用小结
- 最近java面试被问到的问题