宏和函数有什么区别?

define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏。
宏分为普通宏定义和函数宏定义:
普通宏定义:#define MAX 1024
函数宏定义:#define MIN(a, b) ((a) < (b) ? (a) : (b))

宏函数可以完成一些简单的运算,那么宏为什么不能取代函数呢?它们有什么区别?

从代码长度来看:
宏每次使用都插入到程序中对应的位置。除了非常小的宏之外,程序的长度将大幅度增长。
而函数代码只出现在一个地方,每次使用这个函数时,都调用那个地方的同一份代码。

从执行速度看:
宏执行速度快,在预处理阶段直接替换;
调用函数涉及到栈帧开销,相对比宏慢。

从优先级角度来看:
宏直接进行替换,对于参数,除非它们加上括号,否则邻近操作符的优先级可能出错;
而函数参数只在函数调用时求值一次,表达式的求值结果更容易预测。

从调试看
宏是不能调试的;而函数可以调试。

从参数类型来看
宏与类型无关;而函数一定是与类型紧密相关的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值