C語言中相對于普通函數,使用內聯函數的條件和優勢?[復制鏈接]
擦鞋匠當前離線
積分
成家麟 2012-3-2 17:50|顯示全部樓層|。成家麟 2012-3-2 17:40|顯示全部樓層|。成家麟 2012-3-2 17:44|顯示全部樓層|。
零零散散看到網友代碼或者部分源碼中有使用內聯函數,額,可是如何正確使用內聯函數,小弟還不是十分清楚。
用鄰接矩陣實現無向圖(邊和頂點都要保存),實現在包含添加和刪除結點的方法,添加和刪除邊的方法,size(),isempty(),廣度優先迭代器,深度優先迭代器,給出偽代碼c語言 函數 內聯,產品代碼,測試代碼(不少于5條測試),上方提交代碼鏈接,附件提交測試截圖。用十字鏈表實現無向圖(邊和頂點都要保存),實現在包含添加和刪除結點的方法,添加和刪除邊的方法,size(),isempty(),廣度優先迭代器,深度優先迭代器,給出偽代碼,產品代碼,測試代碼(不少于5條測試),上方提交代碼鏈接,附件提交測試截圖。我們用globaladdatom 函數向全局原子添加一個255個字節以內的字符串,用globalfindatom來檢查是否已經存在該全局原子,最后在程序結束時用globaldeleteatom函數刪除添加的全局原子。
<2>相對于普通函數,使用內聯函數的條件是什么?
ps:有網友說,內聯函數不能使用for...、while...、switch case...等比較復雜的語句,具體原因是什么?有無具體的標準?
<3>相對于普通函數,使用內聯函數會帶來哪些優勢?
ps:我能想到的是,減少函數調用帶來的入棧和出棧等時間和內存上的消耗,不知道還有沒有其它的好處?
<4>相對于普通函數,使用內聯函數有哪些注意事項?
在此,懇請路過的大神給予指教,感謝了......
lcofjp當前離線
積分
發表于 2017-11-13 15:40:08|顯示全部樓層
<1>. 首先函數要加上inline關鍵字,編譯器才會根據情況決定是否使用內聯,也就是你指定了inline關鍵字,編譯器也未必內聯
<2>.我覺得足夠精簡的函數可以使用內聯函數,例如只有一兩個語句的函數,當然這語句不能太復雜。
<3>. 除了你說的,也沒別的好處了。相對于宏定義來說有類型檢查的好處
<4>. 沒啥注意事項,當普通函數用就行,有特殊情況編譯器自然會為你處理。
以上僅是個人觀點。
huangqi412
huangqi412當前離線
積分
成家麟 2012-3-2 17:50|顯示全部樓層|。成家麟 2012-3-2 17:40|顯示全部樓層|。成家麟 2012-3-2 17:44|顯示全部樓層|。
編譯器肯定是有優化哪些函數給你搞成內聯的,就像局部變量有些在R,有些在棧。人想的跟編譯器想的不會完全相同,就有了register和inline指定。
針對at89c52單片機,頭文件at89x52.h給出了sfr特殊功能寄存器所有端口的定義。把內聯函數的定義放在頭文件中,可以確保在調用函數時所使用的定義是相同的,并保證在調用點該函數的定義對調用點可見.在頭文件中加入或修改內斂函數時,使用了該頭文件的所有源文件都需要重新編譯.2)類中的成員函數作為內聯函數.在類內聲明的成員函數,如果在類中實現,則自動轉化為內聯函數,但若違反上面所述的情況時,則將其作為一般函數對待.若在類定義外面實現該函數,則需要顯示指定inline.類定義寫在頭文件中時,如果需要內聯函數,函數也應在頭文件中實現.參考:c+。單片機基本結構及c語言編程基礎 譚浩強版c語言程序設計視頻教程 頻率為主頻的, 部件, 部件, 的低四位賦值, //該頭文檔中有單片機內部資源的符號化定義, //該頭文檔中有單片機內部資源的符號化定義, //該頭文檔中有單片機內部資源的符號化定義, //該頭文檔中有單片機內部資源的符號化定義, //該頭文檔中有單片機內部資源的符號化定義, 還有輔助電容, 陽極, 的負極, 陰極. ... [ 04-04 ]。
inline void led_on() {PA_ODR |= 1;}跟 #define led_on() PA_ODR |= 1 define清爽,估計用define的電工更多。
security當前離線
積分
發表于 2017-11-13 16:26:55|顯示全部樓層
關于 inline 的知識,去看書吧。
戳這里:「【分享書籍】『C語言程序設計:現代方法(第 2 版)』中文」
fjourdev當前離線
積分
成家麟 2012-3-2 17:50|顯示全部樓層|。成家麟 2012-3-2 17:40|顯示全部樓層|。成家麟 2012-3-2 17:44|顯示全部樓層|。
內聯可以程序清晰,又不需要像調用那樣程序老是需要轉向有的堆棧小的特別有用 當然 內聯程序量會大很多 好像很多編譯器不支持內聯像松翰就不行
擦鞋匠當前離線
積分
樓主|發表于 2017-11-13 22:37:23|顯示全部樓層
security 發表于 2017-11-13 16:26
關于 inline 的知識,去看書吧。
戳這里:「【分享書籍】『C語言程序設計:現代方法(第 2 版)』中文」 ...
感謝大神
擦鞋匠當前離線
積分
樓主|發表于 2017-11-13 22:39:22|顯示全部樓層
lcofjp 發表于 2017-11-13 15:40
. 首先函數要加上inline關鍵字,編譯器才會根據情況決定是否使用內聯,也就是你指定了inline關鍵字,編譯器 ...
謝謝大神
關于問題2,如何理解“足夠精簡的函數”,感覺這個不太好界定...
security當前離線
積分
發表于 2017-11-14 08:25:26|顯示全部樓層
擦鞋匠 發表于 2017-11-13 22:39
謝謝大神
關于問題2,如何理解“足夠精簡的函數”,感覺這個不太好界定... ...
不要拿 inline 和普通函數比較。
inline 的競爭對手是帶參數的宏,你要想想宏的實現一般能有多復雜,這個也就大致能悟出來了。
qq78929709
qq78929709當前離線
積分
發表于 2017-11-14 09:24:34|顯示全部樓層
擦鞋匠 發表于 2017-11-13 22:39
謝謝大神
關于問題2,如何理解“足夠精簡的函數”,感覺這個不太好界定... ...
雖然技術方面他們更懂,但我們的目的是為了讓他們知道搜索引擎是如何工作的,讓他們明白seo在技術上講是相輔相成的,所以他們懂得了se原理,日后的工作將會為seo工作帶來極大的便利。但是我不知道我懂沒懂,這個懂是怎么懂,其實可能它在某一瞬間他內心的某種東西被這個戲激發了,或者說它想到了某種東西我覺得這已經是懂了,你要求完全的懂,那是怎么一種懂呢。這里的nofollow使用原理和第5條中類似,其主要原因是聯系我們和關于我們這樣的單頁直接放在網站的主導航中,將會從權重方面分散到各個網頁,盡管聯系我們和關于我們在搜索引擎有收錄和排名,但是這樣并不能夠為企業帶來價值c語言 函數 內聯,所以為了優化導航條,可以將聯系我們和關于我們使用上nofollow標簽。
本文來自電腦雜談,轉載請注明本文網址:
http://www.subeirui520.com/a/jisuanjixue/article-109569-1.html
不要瞎說
中國這次也不太強硬