宏和函数

本文探讨了宏在程序修改中的便利性,如简化常量替换和提高运行效率,同时也指出了宏的不足,如无法调试、可能产生副作用和无类型安全。对比之下,函数提供了类型安全、递归支持和更好的调试能力。文章还提到了常量、内联函数作为宏的替代方案,以及#和##在宏定义中的特殊作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、宏的好处:
  • 方便程序的修改

可通过两方面(改数据,和字符串长度过长的时候)

使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将该常量改变时,不用对整个程序进行修改,只修改宏定义的字符串即可,而且当常量比较长时,我们可以用较短的有意义的标识符来写程序,这样更方便一些

  • 提高程序的运行效率

使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,提高运行效率。

2.宏的缺点

  • 不能调试,递归
  • 宏的参数有副作用,不带括号可能会造成歧义
  • 宏没有类型安全检查

2.宏和函数的区别

类型安全,调用,代码大,参数安全,调试递归,指针

  • 宏预处理的时候只是做形式上的替换,

  • 宏不能调试和递归,函数可以

  • 参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。函数只在目标文件中存在一处,比较节省程序空间。

  • 宏函数的每个参数要带括号,否则可能会出现错误

  • 有指向函数的指针,但是无法用指针指向宏


用什么可以替换宏

  • 常量:const ,枚举
  • 函数:内联函数,可以直接展开

#和##的区别

#是为了将宏转化为字符串的

##是为了拼接宏的或者拼接字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值