A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© M.W 中级黑马   /  2016-7-7 14:31  /  832 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1)宏的形参之间可以出现空格,但是宏名和形参之间不能出现空格
#define SUM (a)a + b //错,形参与宏名之间不能有空格

2)在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。而宏调用中的实参有具体的值。要用它们去代换形参,因此必须作类型说明。这是与函数中的情况不同的。在函数中,形参和实参是两个不同的量,各有自己的作用域,调用时要把实参值赋予给形参,进行“值传递”。而在带参宏中,只是符号代换,不存在值传递的问题。

3)在宏定义中的形参是标识符。而宏调用中的实参可以是表达式
#define M(x, y)x * y + x + y
int result2 = M(2 + 2, 3);
但是注意,这样传递是x不是2 + 2 = 4去传,而是把2 + 2换成x,即:
2 + 2 * y + 2 + 2 +y

4)有参宏的宏参数最好用括号括起来
#define M(x, y)(x * y + x + y)

1 个回复

倒序浏览
一血。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马