static inline
、extern inline
和普通的inline
函数有什么区别?
我看到过一些关于此的模糊解释。据我所知,static inline
不仅仅是一个 inline
函数,它意味着仅在某个文件中被称为 static
关键字通常表示。我猜 extern inline
也是如此,这与 extern
变量的解释不同。任何答案将不胜感激!
最佳答案
带有static inline
的函数定义定义了带有内部链接的内联函数。此类函数根据这些限定符的“通常”属性“按预期”工作:static
为其提供内部链接,而 inline
使其成为内联。因此,此函数对于翻译单元来说是“本地”的,并且内嵌在其中。
只有 inline
的函数定义定义了一个带有外部链接的内联函数。但是,这样的定义被称为内联定义,它不能用作该函数的外部定义。这意味着即使此函数具有外部链接,它也会被其他翻译单元视为未定义,除非您在某处为其提供单独的外部定义。
带有extern inline
的函数定义定义了一个带有外部链接的内联函数,同时这个定义作为这个函数的外部定义。可以从其他翻译单元调用该函数。
最后两段意味着您可以选择为具有外部链接的内联函数提供单个 extern inline
定义,或者为其提供两个单独的定义:一个 inline
和其他 extern
。在后一种情况下,当您调用该函数时,允许编译器选择两种定义中的一种。
关于c - 静态内联、外部内联和普通内联函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25000497/