c - 静态内联、外部内联和普通内联函数有什么区别?

标签 c static extern inline-functions

static inlineextern 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/

相关文章:

char *p =NULL 占用内存?

c - 在函数内部使用 malloc 并返回局部指针

c - 静态内联、外部内联和普通内联函数有什么区别?

c - 具有分层控制的函数指针使用: xtern/namespace C++

C++ 未定义的方法引用以及如果所有内容都转到 .h 怎么办?

c - 选择排序指针字符数组的段错误(核心转储)错误

c - gtk_events_pending() 返回 FALSE,事件仍然未决

java - 在实践中,什么情况下操作系统/CPU 不会产生非 volatile Java 变量的最终一致性?

CakePHP 延迟加载因静态访问类常量而失败

macos - 如何在mac OS中观察静态库的内容?