博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅析宏和函数的区别与联系
阅读量:4148 次
发布时间:2019-05-25

本文共 667 字,大约阅读时间需要 2 分钟。

1.一些思考

我们都知道宏非常频繁地用于执行一些简单的运算,比如求较大较小值,但为什么不用函数来完成呢?主要有以下几个原因:

NO.1 用于调用和从函数返回的代码很可能比实际执行这个小型计算工作的代码更大,所以用宏比使用函数在程序的规模和速度方面都更胜一筹

NO.2 函数的参数必须指定为一种特定的类型,只能在类型合适的表达式中使用,而宏是与类型无关的,而这既是宏最大的优点也是它最大的缺点

NO.3 程序的长度会受到宏长度的影响

NO.4 某些任务无法用宏来实现

NO.5 宏在进行表达式求值时由于永久性效果会产生副作用

2.不同之处

如下表所示:

(以下只是个人看法,有不足之处望各位大神及时批评指正)

属性

函数

代码长度

每次使用都被插入到程序中,当宏本身长度较大时,会大大增加程序代码长度

源代码只出现一次,每次使用时调用同一份代码。

执行速度

更快

函数调用时存在额外开销

操作符优先级

参数求值时最好带上括号,否则由于临近操作符的优先级问题可能会产生不可预料的结果

参数只在函数调用时求值一次,并将结果传递给函数,表达式求值结果更易预测

参数求值

每次使用宏定义时都要重新求值,并且由于多次求值使得具有副作用的参数产生不可预料的结果

函数调用前只求值一次,多次使用并不会导致多种求值过程,参数的副作用也不会导致任何问题

参数类型

宏与类型无关,只要对参数的操作是合法的,它可以使用于任何参数类型

函数参数与类型严格有关,参数类型不同,函数也不同,即使他们执行的任务是相同的

命名约定

一般为大写

只要能与宏区分开即可

转载地址:http://wbtti.baihongyu.com/

你可能感兴趣的文章
高性能服务器设计
查看>>
性能扩展问题要趁早
查看>>
MySQL-数据库、数据表结构操作(SQL)
查看>>
OpenLDAP for Windows 安装手册(2.4.26版)
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>
andorid里关于wifi的分析
查看>>
Spring MVC和Struts2的比较
查看>>
Hibernate和IBatis对比
查看>>
Spring MVC 教程,快速入门,深入分析
查看>>
Android 的source (需安装 git repo)
查看>>
Commit our mod to our own repo server
查看>>
LOCAL_PRELINK_MODULE和prelink-linux-arm.map
查看>>
Simple Guide to use the gdb tool in Android environment
查看>>
Netconsole to capture the log
查看>>
Build GingerBread on 32 bit machine.
查看>>