inline在c中的用法

2021-08-31 10:23:00 字數 952 閱讀 7763

***

在c 中,為了解決一些頻繁呼叫的小涵數大量消耗棧空間或是叫棧記憶體的問題,特別的引入了inline修飾符,表示為內聯涵數。

可能說到這裡,很多人還不明白什麼是棧空間,其實棧空間就是指放置程式的區域性資料也就是函式內資料的記憶體空間,在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足所造成的程式出錯的問題,涵數的死迴圈遞迴呼叫的最終結果就是導致棧記憶體空間枯竭。

下面我們來看乙個例子

#include <iostream> 

#include <string> 

using namespace std; 

inline string dbtest(int a); //函式原形宣告為inline即:內聯涵數 

void main() 

cin.get(); 

}  string dbtest(int a)//這裡不用再次inline,當然加上inline也是不會出錯的 

上面的例子就是標準的內聯涵數的用法,使用inline修飾帶來的好處我們表面看不出來,其實在內部的工作就是在每個for迴圈的內部任何呼叫dbtest(i)的地方都換成了(i%2>0)?"奇":"偶"這樣就避免了頻繁呼叫函式對棧記憶體重複開闢所帶來的消耗。

說到這裡很多人可能會問,既然inline這麼好,還不如把所謂的函式都宣告成inline,嗯,這個問題是要注意的,inline的使用是有所限制的,inline只適合涵數體內**簡單的涵數使用,不能包含複雜的結構控制語句例如while、switch,並且內聯函式本身不能直接呼叫遞迴函式(自己內部還呼叫自己的函式)。

說到這裡我們不得不說一下在c語言中廣泛被使用的#define語句,是的define的確也能夠做到inline的這些工作,但是define是會產生***的,尤其是不同型別引數所導致的錯誤,由此可見inline有更強的約束性和能夠讓編譯器檢查出更多錯誤的特性,在c 中是不推薦使用define的。

C 中的 inline 用法

內聯 只是乙個建議。編譯器會看函式的複雜程度來決定是否真正的執行內聯需求。建議內聯放在標頭檔案中?因為編譯器要隨處可見內聯函式的定義,所以把內聯函式放在標頭檔案比較方便。宣告跟定義要一致 如果在每個檔案裡都實現一次該內聯函式的話,那麼,最好保證每個定義都是一樣的,否則,將會引起未定義的行為。如果不是...

C 中的inline用法

在c c 中,為了解決一些頻繁呼叫的小函式大量消耗棧空間 棧記憶體 的問題,特別的引入了inline修飾符,表示為內聯函式。棧空間就是指放置程式的區域性資料 也就是函式內資料 的記憶體空間。在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足而導致程式出錯的問題,如,函式的死迴圈遞迴呼叫...

詳解C 中的inline用法

1.引入inline關鍵字的原因 在c c 中,為了解決一些頻繁呼叫的小函式大量消耗棧空間 棧記憶體 的問題,特別的引入了inline修飾符,表示為內聯函式。棧空間就是指放置程式的區域性資料 也就是函式內資料 的記憶體空間。在系統下,棧空間是有限的,假如頻繁大量的使用就會造成因棧空間不足而導致程式出...