要将inline
函数定义放在C头文件中,以便将函数内联到多个其他单元中,是应该使用inline
还是static inline
?我一直在谷歌搜索一段时间,但到目前为止似乎没有简明的解释。
答案 0 :(得分:14)
在C中内联函数的正确方法如下:
inline
功能
extern inline
函数。example.h文件
inline int example(int val) {
return (val << 2) | 1;
}
example.c
#include "example.h"
extern inline int example(int val);
您不能在标题中声明
static inline
,而不是.c?
这将导致包含标题的每个翻译单元中的单独的独立函数定义。此外,在不必要地增加编译代码的大小时,当您获得指向内联函数的指针时,这会产生一些意外行为:而不是生成相同的地址,在不同的转换单元中采用的内联函数的地址将产生不同的值。
不,绝对没有。这与同一标题的多个包含无关。每个翻译单元都与其他翻译单元分开编译,因此当编译器看到静态函数时,除了创建一个从翻译单元外部不可见的私有副本之外别无选择。但如果一个人守护头文件,可以避免重新定义,不是吗?