1.inline函数
- 在编译阶段,调用点展开,所以导致只能本文件可见
- 和普通函数最大区别在于内部实现方式
- 没有栈帧的开辟和回退,一般直接把内联函数写在头文件
- 调用时在编译期直接代码展开,不会生成符号不需要寻址,使用循环、递归、switch的函数不能声明为内联
- 内联函数往往替换函数体较小的函数
- 内联只是对编译器的建议,最终不一定成功
- 编译阶段有类型检查、安全检查
- 可以调试
- Inline是一种更安全的宏
- 只在Release版本下生效
- 基于实现的,不是基于声明的
- 以代码膨胀为代价,用空间换时间
2.普通函数
- 有栈帧的开辟和回退
- 会在编译完成后生成符号
- 默认是extern,可以被除了源文件以外的其他代码文件调用。
3.Static函数
- 和普通函数最大区别在于作用域
- 只限定在本源码文件中被调用。
- static函数和普通函数的内存存储区域以及内存分配方式相同
- 可以调试
4.宏函数
- 宏是在预编译阶段对宏进行替换。
- 没有类型检查、安全检查
- 不能调试