本文共 667 字,大约阅读时间需要 2 分钟。
我们都知道宏非常频繁地用于执行一些简单的运算,比如求较大较小值,但为什么不用函数来完成呢?主要有以下几个原因:
NO.1 用于调用和从函数返回的代码很可能比实际执行这个小型计算工作的代码更大,所以用宏比使用函数在程序的规模和速度方面都更胜一筹
NO.2 函数的参数必须指定为一种特定的类型,只能在类型合适的表达式中使用,而宏是与类型无关的,而这既是宏最大的优点也是它最大的缺点
NO.3 程序的长度会受到宏长度的影响
NO.4 某些任务无法用宏来实现
NO.5 宏在进行表达式求值时由于永久性效果会产生副作用
如下表所示:
(以下只是个人看法,有不足之处望各位大神及时批评指正)
属性 | 宏 | 函数 |
代码长度 | 每次使用都被插入到程序中,当宏本身长度较大时,会大大增加程序代码长度 | 源代码只出现一次,每次使用时调用同一份代码。 |
执行速度 | 更快 | 函数调用时存在额外开销 |
操作符优先级 | 参数求值时最好带上括号,否则由于临近操作符的优先级问题可能会产生不可预料的结果 | 参数只在函数调用时求值一次,并将结果传递给函数,表达式求值结果更易预测 |
参数求值 | 每次使用宏定义时都要重新求值,并且由于多次求值使得具有副作用的参数产生不可预料的结果 | 函数调用前只求值一次,多次使用并不会导致多种求值过程,参数的副作用也不会导致任何问题 |
参数类型 | 宏与类型无关,只要对参数的操作是合法的,它可以使用于任何参数类型 | 函数参数与类型严格有关,参数类型不同,函数也不同,即使他们执行的任务是相同的 |
命名约定 | 一般为大写 | 只要能与宏区分开即可 |
转载地址:http://wbtti.baihongyu.com/