头文件中定义的小函数:内联还是静态?

eud*_*xos 20 c static inline header-files

我有一些在.h文件中定义的小函数.这是一个小项目(现在),我想避免将声明和定义分开的痛苦,因为它们一直在变化.为了避免多重定义的符号,我可以拥有它们staticinline.什么应该是首选,为什么?

我知道在头文件中定义函数通常是不好的做法.您不必在答案中提及,这个问题在技术上意味着.

Chr*_*oph 25

我会用static inline,但static也可以.

externextern inline外出,因为如果头被包含在一个以上的翻译单元,你会得到多个外部定义,所以你需要考虑的static,static inlineinline规范.

Heptic在他的回答中正确地指出,大多数编译器都会考虑内联函数而不管是否inline指定,即主要影响inline是它对链接的影响.

但是,static定义具有内部联系,因此static和之间没有太大区别static inline; static inline出于纯粹的文体原因,我更喜欢头文件中的函数定义(经验法则:头文件应该只包含extern声明,static const变量定义和static inline函数定义).

inline没有staticextern导致内联定义,标准规定(C99 6.7.4,§6)

提供外部定义的替代,翻译者可以使用该定义在同一翻译单元中实现对该功能的任何调用.未指定对函数的调用是使用内联定义还是使用外部定义.

即内联定义应始终伴随外部定义,而不是您正在寻找的定义.

关于C99内联语义细微之处的更多信息可以在这个答案中找到,在Clang主页C99基本原理(PDF)中.

请记住,如果-std=c99-std=gnu99存在,GCC将仅使用C99语义...