c -内联vs静态内联头文件



inline函数定义放在应该内联到多个其他单元的函数的C头文件中,应该使用inlinestatic inline吗?我在谷歌上搜索了一会儿,但到目前为止似乎还没有对这两者的区别给出简明的解释。

在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吗?

这将导致在包含头文件的每个翻译单元中有单独的独立函数定义。除了不必要地增加编译代码的大小之外,当您获得指向内联函数的指针时,这会产生一些意想不到的行为:而不是产生相同的地址,在不同的翻译单元中获取的内联函数的地址将产生不同的值。

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

不,绝对不是。这与同一个头文件的多个包含无关。每个翻译单元都是与其他翻译单元分开编译的,所以当编译器看到一个静态函数时,它别无选择,只能创建一个在翻译单元外部不可见的私有副本。

相关内容

  • 没有找到相关文章

最新更新