C inline 與 define 區別聯絡

2021-07-23 22:39:35 字數 710 閱讀 2587

1、inline與#define

內聯函式是**被插入到呼叫者**處的函式。如同 #define 巨集,內聯函式通過避免被呼叫的開銷來提高執行效率,尤其是它能夠通過呼叫(「過程化整合」)被編譯器優化。 

2、區別

內聯函式在編譯時展開,而巨集是由預處理器對巨集進行展開

內聯函式會檢查引數型別,巨集定義不檢查函式引數 ,所以內聯函式更安全。

巨集不是函式,而inline函式是函式

巨集在定義時要小心處理巨集引數,(一般情況是把引數用括弧括起來)。

3、inline的使用

在c++中,在類的內部定義了函式體的函式,被預設為是內聯函式。而不管你是否有inline關鍵字 

在內聯函式內不允許用迴圈語句、開關語句和遞迴呼叫等,且函式體不宜過長,否則作為普通函式處理。

在你呼叫乙個內聯函式之前,這個函式一定要在之前有宣告或已定義為inline,如果在前面宣告為普通函式,而在呼叫**後面才定義為乙個inline函式,程式可以通過編譯,但該函式沒有實現inline

如果乙個inline函式會在多個原始檔中被用到,那麼必須把它定義在標頭檔案中。解析:如果內聯函式fun()定義在某個編譯單元a中,那麼其他編譯單元中呼叫fun()的地方時,可以編譯通過(此時並沒有展開,結合第三條,此時雖然標頭檔案宣告了該inline函式,但此時呼叫時,還沒定義,所以作為普通函式處理)。當鏈結時將無法解析該符號,出現鏈結錯誤。 因為inline函式是作為內部連線存在的,只能夠被本模組訪問。

C inline與 define的區別

以inline修飾的函式叫做內聯函式,編譯時c 編譯器會在呼叫內聯函式的地方展開,沒有函式壓棧的開銷,從而能夠提公升程式執行的效率。inline是一種以空間換時間的做法,省去呼叫函式的開銷。所以 很長或者有迴圈 遞迴的函式不適宜作為內聯函式。inline對於編譯器而言只是乙個建議,編譯器會自動優化,...

c inline和 define巨集的區別

1.為什麼要是用巨集定義 對比與一般的呼叫函式 因為呼叫巨集比呼叫函式更有效率,函式的呼叫必須要將程式的執行順序轉移到函式所存放的記憶體位址中,將函式程式內容執行完後,再返回到執行該函式前的地方,這種轉移操作要求執行前要儲存現場並記憶執行位址,轉回後要恢復現場,並按原來儲存的位址繼續執行,因此,函式...

C inline和 define巨集的區別

1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內。2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率問題。另外,前面我們講到了巨集,裡面有這麼乙個例子 define abs x x 0?x x 當 i出現時,巨集就會歪曲我們的意思...