C 內聯函式

2021-07-30 13:37:24 字數 1220 閱讀 1544

"編譯過程的最終產品是可執行程式--由一組機器語言指令組成。執行程式時,作業系統將這些指令載入計算機記憶體中,因此每條指令都有特定的記憶體位址。計算機隨後將逐步執行這些指令。有時(如有迴圈和分支語句時),將跳過一些指令,向前或向後跳到特定位址。常規函式呼叫也使程式跳到另乙個位址(函式的位址),並在函式結束時返回。下面更詳細地介紹這一過程的典型實現。執行到函式呼叫指令時,程式將在函式呼叫後立即儲存該指令的記憶體位址,並將函式引數複製到堆疊(為此保留的記憶體塊),跳到標記函式起點的記憶體單元,執行函式**(也許還需將返回值放入暫存器中),然後跳回到位址被儲存的指令處(這與閱讀文章時停下來看腳注,並在閱讀完腳注後返回到以前閱讀的地方類似)。來回跳躍並記錄跳躍位置意味著以前使用函式時,需要一定的開銷。"

2.內聯函式

內聯函式提供了另一種選擇。編譯器將使用相應的函式**替換函式呼叫。因此,內聯函式的執行速度比常規函式稍快,但代價是需要占用更多記憶體。

3.內聯函式的使用

在函式宣告前加上關鍵字inline;

在函式定義前加上關鍵字inline。

示例如下:

#includeinline 

double square(double x)

intmain()

程式輸出結果如下:

a=25,b=144

c=13

c square=169

now c=14

4.內聯函式與巨集定義的區別

c語言使用預處理器語句#define來提供巨集。如下例所示:

#define square(x) x*x

巨集定義時通過文字替換開實現的--x是引數的符號標記。

a = square(5.0);->a=5.0*5.0;

b = square(4.5+7.5);->b=4.5+7.5*4.5+7.5

d = square(c++);->d=c++*c++

可以看出,對於b,需要使用括號才能正常運算。

#define square(x) ((x)*(x))

對於c,卻仍遞增了兩次。

因此,巨集定義和內聯函式存在本質的區別,轉換的時候應考慮是否轉換後功能是否正常。

5.什麼時候使用內聯函式

如果執行函式**的時間比處理函式呼叫機制的時間長,則節省的時間佔比很小。若**執行時間很短,則內聯函式就可以節省函式呼叫的時間。

C 內聯函式

1 什麼是內聯函式?內聯函式就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈 開關語句等。內聯函式被發明出來就是為了取代c中的巨集,因為巨集是單純的替換而沒有型別檢查所以經常出毛病,2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率...

C 內聯函式

1 什麼是內聯函式?2 為什麼要引入內聯函式?3 為什麼inline能取代巨集?4 內聯函式和巨集的區別?5 什麼時候用內聯函式?6 如何使用內聯函式?7 內聯函式的優缺點?8 如何禁止函式進行內聯?9 注意事項 1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內...

c 內聯函式

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