今天看了一下内联函数,对此进行一个概括和总结。
1.内联函数:
在函数的调用点,把函数的代码全部展开。发生在编译阶段。
而宏是发生在预处理阶段,进行字符串的替换。
相比而言,内联函数是一种更安全的宏。因为内联函数会进行类型检查,而且在编译阶段执行。
2.内联函数的条件:
规模较小
流程直接
调用频繁
3.将规模较小的操作定义成函数的好处:
1>.阅读和理解函数的调用要比读懂等价表达式要容易得多;
2>.使用函数可以确保行为的统一,每次操作都按相同的方式进行;
3>.修改函数功能,可以做到一改全改;
4>.函数可以被重复调用或被引入其他工程,达到代码复用;
4.内联函数的作用域:
本文件内可见。
5.内联函数和普通函数的区别?
1>.内联函数没有标准的函数栈帧的开辟与回退。
2>.内联函数用函数名调用函数,普通函数用函数指针调用函数。
6.内联函数与static函数的区别是什么?
栈帧的开辟,内联函数不产生符号,而普通函数和static函数都会产生符号!
static函数产生符号,并且都是local,普通函数产生的符号都是globle.
链接器只处理globle符号,不处理local符号。
7.处理globle符号时,都需要处理什么?
首先进行符号解析,然后分配内存地址,最后进行符号的重定位!
8.写代码时有两个版本:
Debug版本:调试(插入调试信息,行号呀等等),不存在代码优化,运行速度更快,内存节省。
Release版本:发布(存储运行方面的信息),代码会进行优化。
inline函数主要在Release版本起作用。
Debug版本里,inline函数的调用也需要栈帧的开辟与回退,方便调试。
9.inline函数只是对编译器的一个建议,能不能处理主要还是由编译器决定,编译器也可以对此进行忽略。
10.递归的函数不可能成为内联函数!简单的函数进行内联。