当前位置: 首页 > news >正文

C语言 ——— 宏和函数的区别

目录

宏的优缺点

宏通常被应用于执行简单的运算,比如在两个数中找较大的一个:

宏和函数的区别

结论


宏的优缺点

宏通常被应用于执行简单的运算,比如在两个数中找较大的一个:

#define MAX(x,y) ((x)>(y)?(x):(y)) 

以上的代码逻辑使用函数也可以完成:

int Max(int x, int y)
{return x > y ? x : y;
}

为什么更偏向于用宏来完成呢?

宏的优点:

  1. 用于调用函数和从函数中返回值的汇编代码可能要比用宏来执行这个小型计算工作所需的时间更多,所以宏比函数在程序的规模和速度方面更胜一筹
  2. 函数的参数必须声明为特定的类型,所以函数只能在类型合适的表达式上使用,反之以上代码的宏可以适用于整型,长整型,浮点型来比较,宏和类型是无关的

宏的缺点:

  1. 每次使用宏的时候,一份宏定义的代码都将插入到程序中,除非宏比较短,否则可能大幅度增加程序的长度
  2. 宏是没有办法调试的,报错也只会在是只用宏的地方报错
  3. 因为宏和类型无关,所以宏是不够严谨
  4. 使用宏要注意优先级的问题,否则程序结果会和预期的不同

宏和函数的区别

在代码长度上:每次使用宏的地方都会替换成宏定义的代码插入到程序中,而函数只需要声明一次

在执行速度上:宏更快,因为是直接替换,而函数在执行的时候存在函数的调用和返回,所以相对慢一些

在操作符优先级上:传递给宏的参数要结合代码的上下文来传递,否则容易出现优先级先后的问题,而函数直接传递变量即可,就算是带有副作用的变量,在函数传参时,都会计算后才传递

在参数类型上:宏的使用是和参数的类型无关的,只要是合法的参数,都可以使用宏来完成,而函数在声明时是用的什么类型,传递参数时只能传递对应的类型

在调试上:宏是不方便调试的,函数是可以逐语句调试的

在递归上:宏是不能递归的,函数可以递归


结论

函数和宏各有各的优缺点,要合理分配使用 


http://www.mrgr.cn/news/22639.html

相关文章:

  • 第18届世界杰出华人奖得主王傲山:承父业展关怀,体现“圆桌”精神
  • javaString数据类型
  • Python 将字典转换为 JSON
  • 在亚马逊云科技上利用Graviton4代芯片构建高性能Java应用(下篇)
  • Rust的常数、作用域与所有权
  • Nacos服务注册
  • Android架构组件MVVM模式的实战应用与数据绑定技巧
  • 深度置信网络(深度信念网络)DBN分类模型(二分类多分类)-MATLAB代码实现
  • 无线麦克风哪个品牌音质最好?十大音质最好的麦克风品牌推荐
  • Python画笔案例-039 绘制多角徽章
  • 开源神器!与文档聊天的魔法工具 -- kotaemon
  • 一款免费开源功能丰富的看图软件NeeView
  • GeekDesk:不只是桌面美化,更是你的时间管理与效率提升专家
  • 超级帐本(Hyperledger)
  • 大屏地图区域显示、复选框多选打点,自定义窗体信息(vue3+TS)
  • 14、Flink SQL 的 处理时间 详解
  • 【C#】命名规范
  • openGauss 数据库管理工具:DataKit 6.0 部署与配置实战
  • mysql性能优化-读写分离
  • 纷享销客生态伙伴大会北京站成功举办,共谋数智新未来