首頁 >後端開發 >C++ >C 和 C 的 `inline`、`extern inline` 和 `static inline` 有什麼不同?

C 和 C 的 `inline`、`extern inline` 和 `static inline` 有什麼不同?

Barbara Streisand
Barbara Streisand原創
2024-12-24 04:14:15587瀏覽

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

extern inline 是做什麼的?

與 inline 和 static inline 不同,extern inline 在特定上下文中使用:

在 C99 之前的編譯器中,特別是 GCC,內聯沒有定義的語義。然而,GCC 實現了內聯,作為編譯器在可能的情況下內聯函數的提示。儘管有此建議,但該函數的外聯版本始終會發出並保持外部可見。

為了解決此限制,GCC 引入了 extern 內聯和靜態內聯。

GNU89:

  • 內聯:可能是內聯,但總是會發出外聯版本並且外部可見。
  • extern inline: 不產生外聯版本,但可能從另一編譯呼叫版本unit.
  • static inline:不會產生外部可見的外聯版本,但可能會產生檔案靜態一.

C99(或GNU99):

  • inline: 與GNU89 extern inline 類似,沒有外部可見的函數被發射。
  • extern inline:與GNU89 inline類似,發出外部可見的程式碼,只允許一個翻譯單元使用它。
  • static inline:與GNU89 static inline類似,沒有外部符號或發出對一個的呼叫。

C :

  • 內聯函數必須在所有編譯單元中定義相同。
  • extern inline 或 static inline 沒有標準定義,但有些編譯器是基於以下方式提供這些構造: GNU89 模型。

以上是C 和 C 的 `inline`、`extern inline` 和 `static inline` 有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn