内联

前言

通常,在调用子函数时,通常要经过:保存当前指令位置程序流跳到子函数执行子函数返回之前的指令位置。 对于频繁调用的小函数来说,开销不值

用关键字inline内联函数,则会告诉编译器把小函数编译后的机器码放到用函数的地方,节省函数调用的时间

注意:

inline关键字并非强制性的,只是建议编译器进行内联,但有时候编译器会置之不理

重点:内联函数必须在头文件中实例化

普通函数可以 “头文件声明 +.c文件定义”—— 因为链接时所有翻译单元都能共享那份唯一的定义 但inline函数的目标是 “让编译器把函数调用替换成函数体”(内联优化),而编译器只处理当前翻译单元的代码(不知道其他.o文件里的内容)。

main.c的翻译单元里只有函数声明,没有定义(定义在另一个.c文件中)—— 编译器想内联(替换函数体),但找不到函数体,只能按普通函数处理(生成函数调用指令);

具体使用

搭配关键字static使用

# 在相应的.h文件中
 
// 中断服务程序中调用此函数以增加微秒计数
static inline void Delay_IncUs(void)
{
    us_count++;
}