高质量程序设计指南c++/c语言(8)--内联函数

      宏替换发生在编译预处理阶段,使用宏可以加快执行速度,但是宏有一些缺点
(1)容易出错,预处理器在复制宏代码时常常产生想不到的边际效应
(2)另一个缺点是不能调试,但是内联函数是可以调试的。内联函数不是也像宏一样进行代码展开吗?怎么能调试呢?其实内联函数的可调试不是说它展开后还能调试,而是在程序的调试版本里它根本没有实现内联。在发行版里,编译器才会实施真正的内联。
      内联发生在编译阶段,对任何内联函数,编译器在符号表里放入函数的声明,包括名字、参数、返回值类型(符号表是编译器用来收集和保存字面常量和某些符号常量的地方)。如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都是一样的)。如果正确,内联函数的代码就会直接替换函数调用语句,于是省去了函数调用的开销。内联机制既具备宏代码的效率,又增加了安全性。

      关键字inline必须与函数定义体放在一起才能使函数成为真正的内联,仅仅把inline放在函数声明的前面不起任何作用。

 

转载于:https://www.cnblogs.com/zzj3/archive/2013/04/26/3045862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值