產生:
內聯函數(有時稱作在線函數或編譯時期展開函數)是一種編程語言結構,用來建議編譯器對一些特殊函數進行內聯擴展;也就是說建議編譯器將指定的函數體插入并取代每一處調用該函數的地方(上下文),從而節省了每次調用函數帶來的額外時間開支。但在選擇使用內聯函數時,必須在程序占用空間和程序執行效率之間進行權衡,因為過多的比較復雜的函數進行內聯擴展將帶來很大的存儲資源開支。
比較:
(1)宏調用并不執行類型檢查,甚至連正常參數也不檢查,但是函數調用卻要檢查。
(2)C語言的宏使用的是文本替換,可能導致無法預料的后果,因為需要重新計算參數和操作順序。
(3)在宏中的編譯錯誤很難發現,因為它們引用的是擴展的代碼,而不是程序員鍵入的。
(4)許多結構體使用宏或者使用不同的語法來表達很難理解。內聯函數使用與普通函數相同的語言,可以隨意的內聯和不內聯。
(5)內聯代碼的調試信息通常比擴展的宏代碼更有用。
內聯函數的缺點:
(1)通常,編譯器比程序設計者更清楚對于一個特定的函數是否合適進行內聯擴展;一些情況下,對于程序員指定的某些內聯函數,編譯器可能更傾向于不使用內聯甚至根本無法完成內聯。
(2)對于一些開發中的函數,它們可能從原來的不適合內聯擴展變得適合或者倒過來。盡管內聯函數或者非內聯函數的轉換易于宏的轉換,但增加的維護開支還是使得它的優點顯得更不突出了。
(3)對于基于C的編譯系統,內聯函數的使用可能大大增加編譯時間,因為每個調用該函數的地方都需要替換成函數體,代碼量的增加也同時帶來了潛在的編譯時間的增加。
宏的缺點:
1. 由于是直接插入的,代碼量會增加。
2. 嵌套定義過多可能會影響程序的可讀性,而且很容易出錯。
3. 對帶參的宏而言,由于是直接替換,不會檢查參數,存在安全隱患。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。