1. 背景
内联函数inline为了解决C语言中的宏#define存在的问题而诞生。
因为,宏虽然看起来像函数,但是它使用预处理器实现的。
宏的优点是:省去了函数调用的开销;
宏的缺点是:没有类型安全性检查;
2. 优点
- 获得宏带来的效率,即免除了函数调用成本;
- 又解决了宏的缺点,inline函数具有类型安全检查;
3. 原理
编译器直接将内联函数插入到函数调用的地方
4. 限制
内联函数inline被限制使用在,小型且平凡调用的函数上面
5. 请求
内联函数inline对编译器来说只是一种请求,一种建议,而编译器可以选择也可以忽略这个请求,建议
6. 缺点
- 内联函数会使代码膨胀,造成额外的换页行为,降低效率;
- 内联函数无法随着程序库的升级而升级,必须重新编译;
7. 举例
求两个整型数的最小值:
//宏实现(注:宏记得加括号)
#define MIN(a,b) ( ( (a)<(b) ) ? (a):(b) )
//inline实现
inline int getMinVal(int a,int b){
return ( (a)<(b) ) ? (a):(b);
}