eud*_*xos 20 c static inline header-files
我有一些在.h文件中定义的小函数.这是一个小项目(现在),我想避免将声明和定义分开的痛苦,因为它们一直在变化.为了避免多重定义的符号,我可以拥有它们static或inline.什么应该是首选,为什么?
我知道在头文件中定义函数通常是不好的做法.您不必在答案中提及,这个问题在技术上意味着.
Chr*_*oph 25
我会用static inline,但static也可以.
extern和extern inline外出,因为如果头被包含在一个以上的翻译单元,你会得到多个外部定义,所以你需要考虑的static,static inline和inline规范.
Heptic在他的回答中正确地指出,大多数编译器都会考虑内联函数而不管是否inline指定,即主要影响inline是它对链接的影响.
但是,static定义具有内部联系,因此static和之间没有太大区别static inline; static inline出于纯粹的文体原因,我更喜欢头文件中的函数定义(经验法则:头文件应该只包含extern声明,static const变量定义和static inline函数定义).
inline没有static或extern导致内联定义,标准规定(C99 6.7.4,§6)
提供外部定义的替代,翻译者可以使用该定义在同一翻译单元中实现对该功能的任何调用.未指定对函数的调用是使用内联定义还是使用外部定义.
即内联定义应始终伴随外部定义,而不是您正在寻找的定义.
关于C99内联语义细微之处的更多信息可以在这个答案中找到,在Clang主页和C99基本原理(PDF)中.
请记住,如果-std=c99或-std=gnu99存在,GCC将仅使用C99语义...