静态内联,外部内联和正常内联函数之间的区别是什么?

时间:2014-07-28 17:10:24

标签: c static extern inline-functions

static inlineextern inline和普通inline功能之间的区别是什么?

我已经看到了一些模糊的解释。据我所知,static inline不仅仅是inline函数,只能在某个文件中引用,因为static关键字通常意味着。对于extern inline我也是如此,它与extern变量的解释不同。任何答案将不胜感激!

1 个答案:

答案 0 :(得分:23)

具有static inline的函数定义定义了具有内部链接的内联函数。这些函数从这些限定符的“通常”属性“按预期”工作:static赋予它内部链接,inline使其内联。因此,此函数对于翻译单元是“本地的”并且内联在其中。

仅使用inline的函数定义定义了具有外部链接的内联函数。但是,此类定义称为内联定义,并且它不能用作该函数的外部定义。这意味着即使此函数具有外部链接,它也将被视为来自其他翻译单元的 undefined ,除非您在某处为其提供单独的外部定义

具有extern inline的函数定义定义了具有外部链接的内联函数,同时该定义用作此函数的外部定义。可以从其他翻译单元调用此类函数。

最后两段意味着您可以选择为具有外部链接的内联函数提供单个extern inline定义,或者为其提供两个单独的定义:一个inline和其他{{1 }}。在后一种情况下,当您调用该函数时,允许编译器选择两个定义中的任何一个。