37

static inlinea和extern inline普通inline函数有什么区别?

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

4

1 回答 1

33

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

一个函数定义只inline定义了一个具有外部链接的内联函数。但是,这种定义称为内联定义,它不能作为该函数的外部定义。这意味着即使此函数具有外部链接,它也会被视为未定义其他翻译单元,除非您在某处为其提供单独的外部定义

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

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

于 2014-07-28T17:34:23.880 回答