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