浅析宏和函数的区别与联系
2016-10-19 14:47
260 查看
1.一些思考
我们都知道宏非常频繁地用于执行一些简单的运算,比如求较大较小值,但为什么不用函数来完成呢?主要有以下几个原因:NO.1 用于调用和从函数返回的代码很可能比实际执行这个小型计算工作的代码更大,所以用宏比使用函数在程序的规模和速度方面都更胜一筹
NO.2 函数的参数必须指定为一种特定的类型,只能在类型合适的表达式中使用,而宏是与类型无关的,而这既是宏最大的优点也是它最大的缺点
NO.3 程序的长度会受到宏长度的影响
NO.4 某些任务无法用宏来实现
NO.5 宏在进行表达式求值时由于永久性效果会产生副作用
2.不同之处
如下表所示:(以下只是个人看法,有不足之处望各位大神及时批评指正)
属性 | 宏 | 函数 |
代码长度 | 每次使用都被插入到程序中,当宏本身长度较大时,会大大增加程序代码长度 | 源代码只出现一次,每次使用时调用同一份代码。 |
执行速度 | 更快 | 函数调用时存在额外开销 |
操作符优先级 | 参数求值时最好带上括号,否则由于临近操作符的优先级问题可能会产生不可预料的结果 | 参数只在函数调用时求值一次,并将结果传递给函数,表达式求值结果更易预测 |
参数求值 | 每次使用宏定义时都要重新求值,并且由于多次求值使得具有副作用的参数产生不可预料的结果 | 函数调用前只求值一次,多次使用并不会导致多种求值过程,参数的副作用也不会导致任何问题 |
参数类型 | 宏与类型无关,只要对参数的操作是合法的,它可以使用于任何参数类型 | 函数参数与类型严格有关,参数类型不同,函数也不同,即使他们执行的任务是相同的 |
命名约定 | 一般为大写 | 只要能与宏区分开即可 |
相关文章推荐
- ORACLE 过程、函数、包的区别与联系
- 理解JavaScript函数(函数和对象的区别和联系)
- [转载]C运行时库函数和API函数的区别和联系
- C运行时库函数和API函数的区别和联系
- C运行时库函数和API函数的区别和联系
- 理解JavaScript函数(函数和对象的区别和联系)
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
- 函数fork与vfork的区别与联系详解
- C++中函数指针和函数对象的区别与联系
- C运行时库函数和API函数的区别和联系
- 异常机制与函数调用区别和联系
- 函数fork与vfork的区别与联系详解
- 函数fork与vfork的区别与联系详解
- WinExec, ShellExecute, CreateProcess三个函数的区别和联系
- 函数fork与vfork的区别与联系详解
- 中断处理函数与回调函数的区别与联系?
- 【图像处理】SHLoadImageFile、SHLoadDIBitmap、LoadBitmap、LoadImage、SHLoadImageResource函数联系和区别
- SHLoadImageFile、SHLoadDIBitmap、LoadBitmap、LoadImage、SHLoadImageResource函数联系和区别
- js函数中onmousedown 和 onclick的区别和联系
- 三个PHP调用系统命令函数的区别与联系