內聯函式與巨集

2021-08-28 22:52:07 字數 524 閱讀 5100

內聯函式作用:相當於巨集

與巨集比其優點:巨集需要預編譯,而內聯函式是一種函式,不用預編譯;

與非內聯函式比優點:函式之間呼叫,是記憶體位址之間的呼叫,當函式呼叫完畢還得返回原來的函式。函式呼叫有時間開銷,內聯函式就解決了這一問題;不用inline修飾的函式,彙編時會出現call指令(call指令需要1:將下一條指令的所在位址入棧;2:將子程式的起始位址送入pc)故:內聯函式解決了函式的呼叫效率問題

特點:不用預編譯,因為其是一種函式;

缺點:1.內聯函式只是我們向編譯器提供的申請,編譯器不一定採取inline形式呼叫函式

2.內聯函式不能承載大量**,如果內聯函式的函式體過大,編譯器會自動放棄內聯,如果內聯函式有這些語句,則編譯將該函式視同普通函式那樣產生函式呼叫**,遞迴函式(自己呼叫自己的函式)是不能被用來做內聯函式的。內聯 函式只適合於只有1~5行的小函式。對乙個含有許多語句的大函式,函式呼叫和返回的開銷相對來說微不足道,所以也沒有必要用內聯函式實現。

3.內聯函式不允許使用迴圈語句或開關語句

4.內聯函式的定義需在呼叫前

巨集與內聯函式

函式作為一種抽象機制,對解決大型複雜問題起到了很大作用。但是,由於函式呼叫時需要開銷的,例如,函式呼叫時需要保護呼叫者的執行環境,進行引數傳遞,執行呼叫命令,為區域性變數分配空間以及執行返回指令等,因此函式會帶來程式執行效率的下降,特別是對一些小函式的頻繁呼叫。c 提供了兩種解決上述問題的辦法 巨集...

巨集與內聯函式

建議 1 使用const定義常量而不是 define 2 使用inline內聯函式而不是 define來定義小型函式 第一部分 巨集 為什麼要使用巨集呢?因為函式的呼叫 必須要將程式執行的順序轉移到函式所存放在記憶體中的某個位址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作...

巨集與內聯函式

第一部分 巨集 為什麼要使用巨集呢?因為函式的呼叫必須要將程式執行的順序轉移到函式所存放在記憶體中的某個位址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作要求在轉去執行前要儲存現場並記憶執行的位址,轉回後要恢復現場,並按原來儲存位址繼續執行。因此,函式呼叫要有一定的時間和空...