黑马程序员技术交流社区

标题: 宏的副作用 [打印本页]

作者: yanggangcl    时间: 2015-11-4 22:05
标题: 宏的副作用
宏是有副作用的,比如:
  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++);
复制代码

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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2