理解 extern inline
在 C在程式語言中,內聯函數為編譯器提供了一個提示,可以透過直接插入函數體來潛在地最佳化程式碼在呼叫時而不是產生單獨的子程式
內聯變體之間的差異
在K&R C 和C89 中,內聯沒有標準語義,但許多編譯器以不同的解釋支持它。 GCC 引入了三種變體:內聯、靜態內聯和外部內聯。
C99 和 GNU99
在 C99 中,對 extern inline 的語義進行了修改以反映 GNU89 的內聯行為。內聯和靜態內聯保持不變。
C
在 C 中,內聯函數在使用的任何地方都必須具有相同的定義。同一符號的多個定義由編譯器/連結器處理。 C 中沒有定義 static inline 和 extern inline,儘管某些編譯器可能支援它們。
使用extern inline 確保內聯
在您需要內聯的特定場景中對於使用FILE 和LINE巨集的函數, extern inline 會不保證函數會被內嵌。然而,它是最接近實現此所需行為的 C99 等效項。如果函數未內聯,編譯器或連結器可能會發出錯誤。
編譯器和供應商差異
不同編譯器供應商和版本之間的行為可能會有所不同,因此始終建議您查閱適合您環境的特定文檔。
以上是C 和 C 中的「內聯」、「靜態內聯」和「外部內聯」有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!