深入理解C 中內聯inline函式和巨集定義的區別

2021-10-24 03:30:56 字數 698 閱讀 3412

inline函式是c++引入的機制,目的是解決使用巨集定義的一些缺點。

(1)內聯函式在編譯時展開,巨集在預編譯時展開;

(2)內聯函式直接嵌入到目標**中,巨集是簡單的做文字替換;

(3)內聯函式有型別檢測、語法判斷等功能,巨集沒有;

(4)inline函式是函式,巨集不是;

(5)巨集定義時要注意書寫(引數要括起來)否則容易出現歧義,內聯函式不會產生歧義;

用內聯函式替代巨集定義,消除巨集定義的缺點:

(1)inline函式**是被放到符號表中,使用時像巨集一樣展開,沒有呼叫的開銷,效率很高;

(2)inline函式是真正的函式,所以要進行一系列的資料型別檢查;

(3)inline函式作為類的成員函式,可以使用類的保護成員及私有成員;

(1)使用巨集定義的地方都可以使用inline函式;

(2)作為類成員介面函式來讀寫類的私有成員或者保護成員;

內聯函式以**複雜為代價,它以省去函式呼叫的開銷來提高執行效率。

一方面如果內聯函式體內**執行時間相比函式呼叫開銷較大沒有太大的意義;

另一方面每一處內聯函式的呼叫都要複製**,消耗更多的記憶體空間,因此以下情況不宜使用內聯函式:

(1)函式體內的**比較長,將導致記憶體消耗代價;

(2)函式體內有迴圈,函式執行時間要比函式呼叫開銷大;

深入理解內聯函式

內聯函式,看起來像是函式,運作起來像是函式,比巨集要好得多 巨集沒有錯誤檢查等缺點 使用時還不需要承擔函式呼叫的開銷。基本思想 將每個函式呼叫以它的 來替換。但這種做法很可能會增加整個目標 的體積。在一台記憶體有限的計算機裡,過分地使用內聯所產生的程式會因為有太大的體積導致可用空間不夠。即使可以使用...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...