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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yanggangcl 中级黑马   /  2015-11-4 22:05  /  702 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

宏是有副作用的,比如:
  1. #define max(a,b)a>b?a:b
复制代码

如果用在:
  1. theMax = max(a,b) + 1;
复制代码

则通过宏替换变成了:
  1. theMax = a>b?a:b+1;
复制代码

于是我们想到要把宏定义中的各个参数与整个结果表达式都用括号括起来,但是不是就可以了呢?
事实是,因为上面的宏定义中操作数a被两次用到,所以会被求值两次,如果是下面的情况则又会出错:
  1. theMax = max (a++, b++);
复制代码

所以,不会用宏时,还是用函数比较保险。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马