宏雖然有著一定的優勢,但是它的缺點也不可忽視。
在編譯階段,我們很難發現代碼哪里出問題了,因為宏替換是發生在預處理階段,所以有時候在宏函數傳參的時候發生一些錯誤,編譯器不會發現,那它調試起來就很麻煩。
所以為了解決這種不利于調試的問題,就有了內聯函數。
那么什么是內聯函數呢?
我們以inline修飾的函數叫做內聯函數,編譯階段,C編譯器會在調用函數的地方直接把函數展開,沒有壓棧開銷,內聯函數提升程序運行效率,但是會相應的增加代碼的長度。所以這里叫做空間換時間。
道之初,帶來了空間和時間,所以,空間和時間就是編程的陰陽兩級。
不懂編程之道的程序員常常把空間和時間消耗殆盡,得道的程序員則總是有足夠的空間和時間完成編程任務。
舉個例子
inline int Add(int a,int b){ return a+b;}
編譯期間,編譯器會將內聯函數替換相應的函數體;
這里要注意一點,在函數前加 inline 只是建議編譯器當作內容函數處理 ,但編譯器有自己的主張(遞歸 ,復雜函數等)
內聯函數的特性:
inline是一種以空間換時間的做法,省去調用函數中參數壓棧,減少了調用的開銷。同時,使用內聯函數也比宏函數更省心,不必擔心宏參數傳遞過程中出現的意外情況。
inline對于編譯器而言只是一個建議,編譯器會自動優化,如果定義為inline的函數體內有循環/遞歸等等,編譯器優化時會忽略掉內聯,另外,如果內聯函數的函數體過大,一般的編譯器也會放棄內聯方式,采用普通調用的方式進行函數調用。
inline不建議聲明和定義分離,分離會導致鏈接錯誤。因為inline被展開,就沒有函數地址了,鏈接就會找不到。
-
函數
+關注
關注
3文章
4367瀏覽量
64158 -
代碼
+關注
關注
30文章
4886瀏覽量
70239 -
編譯器
+關注
關注
1文章
1654瀏覽量
49880
發布評論請先 登錄
SMA接頭的優勢和缺陷

A/B型缺陷和D/V類缺陷介紹

評論