赞
踩
“我努力奔跑,只为追上曾经被寄予厚望的自己。”
金州勇士队队员 - 肖恩·利文斯顿
本文以 RT-Thread 操作系统为例:
我们可以在 RT-Thread 的内核代码的 kservice.c
中有关于 inline
的宏定义(省略中间无关的代码):
#ifdef __CC_ARM /* ARM Compiler */ #define rt_inline static __inline #elif defined (__IAR_SYSTEMS_ICC__) /* for IAR Compiler */ #define rt_inline static inline #elif defined (__GNUC__) /* GNU GCC Compiler */ #define rt_inline static __inline #elif defined (__ADSPBLACKFIN__) /* for VisualDSP++ Compiler */ #define rt_inline static inline #elif defined (_MSC_VER) #define rt_inline static __inline #elif defined (__TI_COMPILER_VERSION__) #define rt_inline static inline #else #error not supported tool chain #endif
我们知道这是内联的关键字,不同的编译器实现的方式不同,问题是为什么要在 inline
前面加 static
呢?
我们知道,内联函数一般是写在 .h
文件,方便别的文件调用,虽然长得像宏,但是本质上还是函数,但是可以理解为函数实体直接嵌入在调用的地方,这一点类似宏,所以运行效率特别高,缺点就是占用空间比较大。
回到问题本身,你在多个 .c
文件中包含实现内联函数的头文件,意味着每个 .c文件都定义了这个函数,就会造成函数重定义的错误,所以需要加上 static 来限定其作用范围。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。