iar中實現內聯函式 inline
在iar中的寫法如下:
#pragma inline
int gettwobyte(const char *cmd,int pos)
在keil中的寫法如下:
__inline int gettwobyte(const char *cmd,int pos)
函式是一種更高階的抽象。它的引入使得程式設計者只關心函式的功能和使用方法,而不必關心函式功能的具體實現;函式的引入可以減少程式的目標**,實現程式**和資料的共享。但是,函式呼叫也會帶來降低效率的問題,因為呼叫函式實際上將程式執行順序轉移到函式所存放在記憶體中某個位址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。這種轉移操作要求在轉去前要保護現場並記憶執行的位址,轉回後先要恢復現場,並按原來儲存位址繼續執行。因此,函式呼叫要有一定的時間和空間方面的開銷,於是將影響其效率。特別是對於一些函式體**不是很大,但又頻繁地被呼叫的函式來講,解決其效率問題更為重要。引入內聯函式實際上就是為了解決這一問題。
在程式編譯時,編譯器將程式中出現的內聯函式的呼叫表示式用內聯函式的函式體來進行替換。顯然,這種做法不會產生轉去轉回的問題,但是由於在編譯時將函式休中的**被替代到程式中,因此會增加目標程式**量,進而增加空間開銷,而在時間代銷上不象函式呼叫時那麼大,可見它是以目標**的增加為代價來換取時間的節省。
內聯函式的實現機制
以下摘自c thinking 為了理解內聯何時有效,應該先理解編譯器遇到乙個內聯函式時將做什麼。對於任何函式,編譯器在它的符號表裡放入函式型別 即包括名字和引數型別的函式原型及函式的返回型別 另外,編譯器看到內聯函式和內聯函式的分析沒有錯誤時,函式的 也被放入符號表。是以源程式形式存放還是以編譯過的...
C 中的內聯函式
華清遠見嵌入式學院 講師。c 中存在一些具有特殊意義或功能的特殊函式,我們來簡單介紹一下內聯函式。從軟體工程的角度來看,我們通常將乙個程式通過一組函式來進行實現,但是函式的呼叫涉及到執行時間的開銷,如果有的函式需要頻繁使用,則累計占用的時間會很長,所以c 提供了內聯函式的機制來提高效率,也就是在編譯...
C 中的內聯函式
c 中的內聯函式 華清遠見嵌入式學院講師。c 中存在一些具有特殊意義或功能的特殊函式,我們來簡單介紹一下內聯函式。從軟體工程的角度來看,我們通常將乙個程式通過一組函式來進行實現,但是函式的呼叫涉及到執行時間的開銷,如果有的函式需要頻繁使用,則累計占用的時間會很長,所以c 提供了內聯函式的機制來提高效...