宏定义、内联函数、普通函数的区别

宏定义和内联函数的区别:

第一:宏定义时在预处理阶段进行代码替换,而内联函数在编译阶段进行代码替换。

第二:宏定义没有类型检查,而内联函数有类型检查。


内联函数和普通函数最大的区别是在内部实现方面上:

普通函数在被调用时,系统首先要跳跃到该函数的入口地址,执行函数体,执行完成后,再返回到函数调用的地方,函数始终只有一个复制而内联函数则不需要一个寻址过程,当执行到内联函数时,内联函数像宏一样展开,如果在N处调用了内联函数,则此函数就会有N个代码段的复制。编译器会在内联函数调用的地方,将内联函数的内容展开,避免了函数调用的开销,又没有宏机制的缺陷。执行速度比一般的函数执行速度要快。


内联函数本身不能直接调用递归函数。只适合函数体内简单代码的使用。


任何在类的说明部分定义的函数都会被自动的认为是内联函数。内联函数必须是函数体声明在一起,才有效。像这样的的声明 Inline Function(int i)是没有效果的,编译器只是把函数作为普通函数的声明,我们必须定义函数体。


内联函数的调用必须出现在第一次被调用之前。


在类的内部定义了函数体的函数,被默认是内联函数,而不管是否有inline关键字修饰。


内联函数也有一定的局限性,如果函数体过大,编译器会放弃内联方式,而采用普通的方式调用函数。内联函数是以增加空间的消耗为代价的,是否需要inline函数就需要根据实际情况取舍。


inline一般只用于如下情况:

1) 一个函数不断被重复调用。

2)函数只有简单的几行,且函数不包含for、while、switch语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值