关于armcc中static __inline修饰符的记录
相关的知识点:内联函数,static关键字
在一次stm32的库代码分析中发现static __inline 的函数定义,对此有些疑惑,static和inline两个关键字为什么要进行连用呢?
对此进行分析和搜索资料,从而进行了整理。
首先,该定义是位于cmsis_armcc.h中

一般使用在函数的修饰中,这些被__STATIC_INLINE修饰的函数一般都位于头文件中,然后被其他的函数进行调用。
这个函数定义在xxx_ll_dma.h的头文件中。

目前网络上的观点是:
static __ inline中,真实起作用的只有__ inline 而static只是提升程序的健壮性。
那么这两个关键字起的作用是什么呢?
对于内联函数,开发者只是起到建议的作用,也就是说,即使是使用了 inline 这个关键字,编译器也不一定是把这个函数当成内联函数来操作,而是编译器根据决策树来进行判断,是否要进行内联,那么问题来了,如果将一个内联函数定义在头文件里,被多个c文件包含,但是 编译器经过决策后,认为这个函数不适合内联,那么就会造成一个问题,即在多个c文件中重复定义,从而产生问题,但是如果使用了static关键字,就可以将其限制在每一个c文件里,让它成为单独的一个内部函数。
注意:__STATIC_FORCEINLINE 也不能强制编译器进行内联,只是会增大内联的概率。
参考链接:
本文来自博客园,作者:stack0verflow,转载请注明原文链接:https://www.cnblogs.com/stack0verflow/p/18110763

浙公网安备 33010602011771号