首页 >后端开发 >C++ >C 和 C 中的'内联”、'静态内联”和'外部内联”有什么区别?

C 和 C 中的'内联”、'静态内联”和'外部内联”有什么区别?

Barbara Streisand
Barbara Streisand原创
2024-12-24 17:51:11268浏览

What's the Difference Between `inline`, `static inline`, and `extern inline` in C and C  ?

理解 extern inline

在 C 编程语言中,内联函数为编译器提供了一个提示,可以通过直接插入函数体来潜在地优化代码在调用时而不是生成单独的子例程

内联变体之间的差异

在 K&R C 和 C89 中,内联没有标准语义,但许多编译器以不同的解释支持它。 GCC 引入了三种变体:内联、静态内联和外部内联。

  • inline: 建议内联优化,但也会生成外联版本。跨编译单元只能存在一个定义。
  • extern inline: 与内联类似,但不会生成外联版本。但是,可能会调用外联版本,该版本必须存在于另一个编译单元中。
  • static inline: 生成文件静态,但外部不可见,内联版本。不会生成外联版本。

C99 和 GNU99

在 C99 中,对 extern inline 的语义进行了修改以反映 GNU89 的内联行为。内联和静态内联保持不变。

C

在 C 中,内联函数在使用的任何地方都必须具有相同的定义。同一符号的多个定义由编译器/链接器处理。 C 中没有定义 static inline 和 extern inline,尽管某些编译器可能支持它们。

使用 extern inline 确保内联

在您需要内联的特定场景中对于使用 FILELINE 宏的函数, extern inline 会不保证该函数将被内联。然而,它是最接近实现此所需行为的 C99 等效项。如果函数未内联,编译器或链接器可能会发出错误。

编译器和供应商差异

不同编译器供应商和版本之间的行为可能会有所不同,因此始终建议您查阅适合您环境的特定文档。

以上是C 和 C 中的'内联”、'静态内联”和'外部内联”有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn