C語言內聯函式

2021-09-26 18:44:38 字數 1614 閱讀 5757

[1] 內聯函式 —— c 中關鍵字 inline 用法解析

測試**:

inlinetest.c

#include "inlinetest.h"

#include "stdio.h"

#define adddefine(a, b, val) do while(0)

/*inline int addinline(int a, int b)

*/int main()

inlinetest.h

#ifndef _inlinetest_h

#define _inlinetest_h

int addinline(int a, int b);

inline int addinline(int a, int b)

#endif

注意:內聯函式的宣告和實現都放到標頭檔案裡面,並且兩者缺一不可。

預處理:

可以看到巨集定義函式在預處理階段就已經被展開了。

預處理以後的結果為:

extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));

# 912 "/usr/include/stdio.h" 3 4

extern void flockfile (file *__stream) __attribute__ ((__nothrow__ , __leaf__));

extern int ftrylockfile (file *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;

extern void funlockfile (file *__stream) __attribute__ ((__nothrow__ , __leaf__));

# 942 "/usr/include/stdio.h" 3 4

# 3 "inlinetest.c" 2

# 13 "inlinetest.c"

# 13 "inlinetest.c"

int main()

while(0);

printf("the defineadd sum is = %d\n", adddefineval);

printf("the inlineadd sum is = %d\n", addinline(a,b));

return 0;

}

內聯函式使用特點:

乙個函式不斷被重複呼叫;

函式只有簡單的幾行,且函式不包含for、while、switch語句。

兩者的區別:

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

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

在預編譯時期,巨集定義在呼叫處執行字串的原樣替換。在編譯時期,內聯函式在呼叫處展開,同時進行引數型別檢查。

C語言內聯函式inline

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

C語言 的內聯函式

通常,函式呼叫都有一定的開銷,因為函式的呼叫過程包括建立呼叫 傳遞引數 跳轉到函式 並返回。使用巨集使 內聯,可以避免這樣的開 銷。c99還提供另一種方法 內聯函式 inline function 可能顧名思義地認為內聯函式會用內聯 替換函式呼叫。其實c99和c11標準中敘述 的是 把函式變成內聯函...

內聯函式 C語言的inline內聯函式的作用

編譯器完成的,在呼叫處將函式展開,減少了呼叫函式時 進棧和出棧 壞處是會增加 段的大小 缺點 增加了編譯後的二進位制檔案的大小 為了提高執行的速度,對於一些程式 小,執行時間短但利用次數比較多的函式我們就定義為inline,對於短小的函式,可以省去call儲存現場等操作,提高程式執行速度。原文 分類...