内联函数,可以看作是编译期间的一种替换,其设计的目的是为了代替复杂的宏替换。因为宏替换是预编译期间做的,所以如果有问题,没有那么容易察觉出来。
内联函数在编译期间的替换会将函数的代码替换到调用它的地方,在汇编这一层来看,我们就不需要再在栈里保存主程序执行到的代码的内存地址等信息,这样就可以节约一点时间了。很多时候,这点时间是微乎其微的,使用内联函数节省时间的效果并不明显。
我不知道有没有强制内联这种东西,内联这种机制可能大部分还是属于编译器自己对代码的优化。不管你有没有加inline关键字,编译器都会有自己的判断来选择内联或者不内联。
所以说内联更像是程序员给编译器的建议,决定权在编译器。
内联函数是为频繁使用、并且过程不大的小型函数设计的,它是以增加ROM占用空间来节省函数调用的开销,内联函数使用不当就会造成代码膨胀,所以使用它一定要小心。
so, for function-like macros, prefer inline functions to #defines.