C 語言基礎 7 inline內聯函式

2022-06-11 18:00:14 字數 996 閱讀 6857

函式呼叫是有時間和空間開銷的。程式在執行乙個函式之前需要做一些準備工作,要將實參、區域性變數、返回位址以及若干暫存器都壓入棧中,然後才能執行函式體中的**;函式體中的**執行完畢後還要清理現場,將之前壓入棧中的資料都出棧,才能接著執行函式呼叫位置以後的**。

如果函式體**比較多,需要較長的執行時間,那麼函式呼叫機制占用的時間可以忽略;如果函式只有一兩條語句,那麼大部分的時間都會花費在函式呼叫機制上,這種時間開銷就就不容忽視。為了消除函式呼叫的時空開銷,c++ 提供一種提高效率的方法,即在編譯時將函式呼叫處用函式體替換,類似於c語言中的巨集展開。這種在函式呼叫處直接嵌入函式體的函式稱為內聯函式(inline function),又稱內嵌函式或者內建函式。

具體用法如下:

#include using

namespace

std;

//內聯函式,交換兩個數的值

inline void swap(int *a, int *b)

intmain()

當編譯器遇到函式呼叫swap(&m, &n)時,會用 swap() 函式的**替換swap(&m, &n),同時用實參代替形參。這樣,程式第 10 行就被置換成:

int

temp;

temp = *(&m);

*(&m) = *(&n);

*(&n) = temp;

執行結果:

45 99

45, 99

99, 45

注意:1)  要在函式定義處新增 inline 關鍵字,在函式宣告處新增 inline 關鍵字雖然沒有錯,但這種做法是無效的,編譯器會忽略函式宣告處的 inline 關鍵字。

2)  當函式比較複雜時,函式呼叫的時空開銷可以忽略,大部分的 cpu 時間都會花費在執行函式體**上,所以我們一般是將非常短小的函式宣告為內聯函式

C 語言基礎 7 inline內聯函式

函式呼叫是有時間和空間開銷的。程式在執行乙個函式之前需要做一些準備工作,要將實參 區域性變數 返回位址以及若干暫存器都壓入棧中,然後才能執行函式體中的 函式體中的 執行完畢後還要清理現場,將之前壓入棧中的資料都出棧,才能接著執行函式呼叫位置以後的 如果函式體 比較多,需要較長的執行時間,那麼函式呼叫...

C語言內聯函式inline

一 什麼是內聯函式 在c語言中,如果一些函式被頻繁呼叫,不斷地有函式入棧,即函式棧,會造成棧空間或棧記憶體的大量消耗。為了解決這個問題,特別的引入了inline修飾符,表示為內聯函式。棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因...

c 基礎學習筆記 內聯函式(inline)

函式呼叫需要建立棧記憶體環境,進行引數傳遞,並產生程式執行轉移,這些工作都需要時間開銷,有些函式使用頻率高,但 卻很短,因此c 提供了inline函式,減少函式呼叫的成本。內聯函式的函式體限制 內聯函式中,不能含有複雜的結構體控制語句,如switch和while等。如果內聯函式有這些語句,則編譯將該...