头文件中的内联与静态内联

时间:2014-05-16 15:58:48

标签: c static inline-functions

要将inline函数定义放在C头文件中,以便将函数内联到多个其他单元中,是应该使用inline还是static inline?我一直在谷歌搜索一段时间,但到目前为止似乎没有简明的解释。

1 个答案:

答案 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?

这将导致包含标题的每个翻译单元中的单独的独立函数定义。此外,在不必要地增加编译代码的大小时,当您获得指向内联函数的指针时,这会产生一些意外行为:而不是生成相同的地址,在不同的转换单元中采用的内联函数的地址将产生不同的值。

  

但如果一个人守护头文件,可以避免重新定义,不是吗?

不,绝对没有。这与同一标题的多个包含无关。每个翻译单元都与其他翻译单元分开编译,因此当编译器看到静态函数时,除了创建一个从翻译单元外部不可见的私有副本之外别无选择。