在C语言中,如果要实现一个功能,一般我们优先考虑是编写一个函数去实现它,但是如果这个功能相对简单,我们也许会考虑用类宏函数(宏定义)来做,毕竟相对于函数,宏定义没有建立调用,传参,地址跳转等相对繁杂的过程,但是如果有参数传递的话,在用宏的时候是没有办法检查参数合理性的,在C99以后,C语言提供了一个新的选择——内联函数。
先来介绍一下内联函数,标准规定,函数的调用和定义必须在同一个文件中,且具有内部链接属性的函数可以成为内联函数。所以简单的定义:
inline static void function()
{
while(getchar()!=’\n’)
}
这个例子是书上的,将就拿来用用,总之,static保证了函数的链接属性为内部链接,所以一般看到使用的内联函数都是带着inline和static进行修饰的。
应用场景:
在嵌入式中开发中,其实挺常见的,不知道大家关注过没有,STM32的LL库大量使用了内联函数,还有TI的库函数中也是一样,以下是ST的LL库中内联函数实例:
且内联函数通常都定义在头文件中,这又是为什么呢?
因为内联函数的内部链接属性(static),如果程序想在多个文件中使用到该内联函数,那么这些文件就必须都包含该函数的定义,所以一般都将内联函数放到头文件中,在使用该内联函数的文件中包含该头文件即可。
不过看起来内联函数算是个特例,除了内联函数,不建议将其他的static函数或变量定义在头文件中。