C C 內聯函式

2022-07-23 07:45:15 字數 1820 閱讀 4253

內聯 inline 是個修飾符,用來修飾體積不大又呼叫頻繁的函式,可以減小函式呼叫的開銷。

所謂減小開銷,就是在編譯時把函式體的**嵌入進去,達到和巨集類似的效果,這樣程式在執行到該函式時,就不需要在頻繁的跳轉中消耗棧的空間。

從經驗上來說,函式體在十行以內,執行邏輯極其簡單(寫值,簡單的判斷和計算等),呼叫又十分頻繁,尤其是一些工程**中會放在週期迴圈裡一直跑的,聯絡到其它模組的函式,就可以寫成內聯函式。

格式:

inline + 《函式頭》
使用起來很簡單,在函式頭前面加上個inline就行,但有一點要注意,inline修飾的函式要當場給出其原型。inline只是修飾符,不能用作宣告

下面寫法是不允許的:

inline int max(int a,int

b);int max(int a,int

b)

下面寫法是允許的:

int max(int a,int

b);inline

int max(int a,int

b)

另外,內聯函式無法使用for,while,switch語句。c++的類裡面的成員函式會被預設為內斂函式。

慎用內斂函式,除非它足夠簡單。最好把它們統一寫到乙個標頭檔案裡使用。

1.內聯函式在執行時可除錯,而巨集定義不可以;

2.編譯器會對內聯函式的引數型別做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會;

3.內聯函式可以訪問類的成員變數,巨集定義則不能;

4.在類中宣告同時定義的成員函式,自動轉化為內聯函式。

巨集是不加任何驗證的簡單的**字串替換,而內聯函式說到底仍然是函式。

定義一種結構體,內部有兩個vector容器,乙個用來儲存奇數,乙個用來儲存偶數。

定義兩個內聯函式,第乙個判斷特定數字是奇數還是偶數,第二個把數字作區分後寫到結構體裡的vector容器內。

檢測0~99內的一百個數,分別顯示出所有奇數和偶數。

extra.h

#ifndef _extra_h_

#define _extra_h_#include

#include

using

std::vector;

typedef unsigned

short

uint8;

typedef

bool

b;typedef

struct

numbers_st;

numbers_st hundred_numbers;

inline b check_odd_even(uint8 n)

inline

void

write_odd_even_numbers(uint8 n)

else

}#endif

//_extra_h_

main.cpp

#include "

extra.h

"int

main()

std::cout

<

odd numbers:\n";

for(uint8 i=0;i)

std::cout

<

; std::cout

<

even numbers:\n";

for(uint8 i=0;i)

}

結果

c c 內聯函式

理論知識就先上這麼多了,來點實際的,呈上 includeinline double square double x 內聯函式定義 int main using namespace std double a,b a sum 2.0 b square 2.0 3.0 cout a 通過上面的例子可以看出...

基礎C C 內聯函式 巨集定義

內聯函式從源 層看,有函式的結構,而在編譯後,卻不具備函式的性質。編譯時,類似巨集替換,使用函式體替換呼叫處的函式名。一般在 中用inline修飾,但是能否形成內聯函式,需要看編譯器對該函式定義的具體處理。如果,內聯函式的函式體過大,一般的編譯器會放棄內聯方式,而採用普通的方式呼叫函式。任何在類的說...

c c 內聯彙編

asm volatile 內嵌彙編用法簡述 在閱讀c c 原碼時經常會遇到內聯彙編的情況,下面簡要介紹下 asm volatile 內嵌彙編用法。因為我們華清遠見教學平台是arm體系結構的,所以下面的示例都是用arm彙編。帶有c c 表示式的內聯彙編格式為 asm volatile instruct...