内联
前言
通常,在调用子函数时,通常要经过:保存当前指令位置、程序流跳到子函数、执行子函数、返回之前的指令位置。 对于频繁调用的小函数来说,开销不值
用关键字inline内联函数,则会告诉编译器把小函数编译后的机器码放到用函数的地方,节省函数调用的时间
注意:
inline关键字并非强制性的,只是建议编译器进行内联,但有时候编译器会置之不理
重点:内联函数必须在头文件中实例化
普通函数可以 “头文件声明 +.c文件定义”—— 因为链接时所有翻译单元都能共享那份唯一的定义
但inline函数的目标是 “让编译器把函数调用替换成函数体”(内联优化),而编译器只处理当前翻译单元的代码(不知道其他.o文件里的内容)。
main.c的翻译单元里只有函数声明,没有定义(定义在另一个.c文件中)—— 编译器想内联(替换函数体),但找不到函数体,只能按普通函数处理(生成函数调用指令);
具体使用
搭配关键字static使用
# 在相应的.h文件中
// 中断服务程序中调用此函数以增加微秒计数
static inline void Delay_IncUs(void)
{
us_count++;
}