什么是'extern inline'函数以及何时使用?

What is an 'extern inline' function and when to use?

本文关键字:何时使 inline extern 什么 函数      更新时间:2023-10-16

有这样的事情,它在最新的C++草案中:

在§ 7.1.2 .4:

应在以下每个翻译单元中定义内联函数: 它是ODR使用的,并且在每个中都应具有完全相同的定义 案例 (3.2)。[ 注意:可能会遇到对内联函数的调用 在其定义出现在翻译单元中之前。— 尾注 ] 如果 函数的定义出现在翻译单元中,位于其之前 第一个声明为内联,程序格式不正确。如果函数 外部链接在一个翻译单元中内联声明,它 应在出现的所有翻译单元中内联声明; 无需诊断。具有外部链接的内联功能 所有翻译单元的地址应相同。静态本地 外部内联函数中的变量总是引用相同的变量 对象。在外部内联函数主体中定义的类型是 每个翻译单元中的类型相同。

关于这是什么以及何时使用它的一些见解?

extern对于函数来说是多余的,因此将函数声明为extern inline是没有意义的。例如,如果您声明了一个在全局范围内inline函数,则本节的规则将适用。同样,如果您在全局范围内声明了一个类并在类定义中定义了成员函数,因为这样的函数将隐式inline

什么时候应该声明一个函数的问题inline是一罐蠕虫,我不倾向于在这里打开。请参阅:何时应该为函数/方法编写关键字"inline"?

我不熟悉C++中的这个草案功能,以及它是否成为标准。我认为它可能借用了 C 的一个功能。


在 C(我认为是 C99?)中,extern inline用于源文件,而不是头文件。 指示工具从此源生成的对象文件应该是保存最终实现的对象文件。如果没有它,链接器必须选择一个站点或复制符号。

例如,在my_alloc.h

inline char *my_alloc(size_t len) { return (char*)malloc(len); }

并在my_alloc.c

extern inline char *my_alloc(size_t len);