這個(gè)是內(nèi)聯(lián)函數(shù)。
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括泰山網(wǎng)站建設(shè)、泰山網(wǎng)站制作、泰山網(wǎng)頁制作以及泰山網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,泰山網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到泰山省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
C語言本身是不支持內(nèi)聯(lián)函數(shù)的,在最新的C標(biāo)準(zhǔn)C99中C語言支持了內(nèi)聯(lián)函數(shù)。
C++支持內(nèi)聯(lián)函數(shù)。
從編譯器的角度:
有些C語言編譯器,例如GNU C提供了內(nèi)聯(lián)函數(shù)的支持。
所有C++編譯器都支持內(nèi)聯(lián)函數(shù)。
如果你的C語言編譯器不支持內(nèi)聯(lián)函數(shù),看看它有多古老,太古老不行(例如 Turbo C 2.0)。如果是C/C++合體編譯器,那就切換到編譯C++模式(例如VisualC++)。
其實(shí)看你用得編譯器了,如果你用的VC++6.0的話, 不管是.C文件還是.CPP文件都可以用inline 定義內(nèi)聯(lián)函數(shù)。但是語法來說,C語言是沒有內(nèi)聯(lián)這個(gè)概念的,C++才有
引入內(nèi)聯(lián)函數(shù)的目的是為了解決程序中函數(shù)調(diào)用的效率問題。
函數(shù)是一種更高級(jí)的抽象。它的引入使得編程者只關(guān)心函數(shù)的功能和使用方法,而不必關(guān)心函數(shù)功能的具體實(shí)現(xiàn);函數(shù)的引入可以減少程序的目標(biāo)代碼,實(shí)現(xiàn)程序代碼和數(shù)據(jù)的共享。但是,函數(shù)調(diào)用也會(huì)帶來降低效率的問題,因?yàn)檎{(diào)用函數(shù)實(shí)際上將程序執(zhí)行順序轉(zhuǎn)移到函數(shù)所存放在內(nèi)存中某個(gè)地址,將函數(shù)的程序內(nèi)容執(zhí)行完后,再返回到轉(zhuǎn)去執(zhí)行該函數(shù)前的地方。這種轉(zhuǎn)移操作要求在轉(zhuǎn)去前要保護(hù)現(xiàn)場并記憶執(zhí)行的地址,轉(zhuǎn)回后先要恢復(fù)現(xiàn)場,并按原來保存地址繼續(xù)執(zhí)行。因此,函數(shù)調(diào)用要有一定的時(shí)間和空間方面的開銷,于是將影響其效率。特別是對(duì)于一些函數(shù)體代碼不是很大,但又頻繁地被調(diào)用的函數(shù)來講,解決其效率問題更為重要。引入內(nèi)聯(lián)函數(shù)實(shí)際上就是為了解決這一問題。
在程序編譯時(shí),編譯器將程序中出現(xiàn)的內(nèi)聯(lián)函數(shù)的調(diào)用表達(dá)式用內(nèi)聯(lián)函數(shù)的函數(shù)體來進(jìn)行替換。顯然,這種做法不會(huì)產(chǎn)生轉(zhuǎn)去轉(zhuǎn)回的問題,但是由于在編譯時(shí)將函數(shù)休中的代碼被替代到程序中,因此會(huì)增加目標(biāo)程序代碼量,進(jìn)而增加空間開銷,而在時(shí)間代銷上不象函數(shù)調(diào)用時(shí)那么大,可見它是以目標(biāo)代碼的增加為代價(jià)來換取時(shí)間的節(jié)省。
應(yīng)該是c++中才有的,
inline 關(guān)鍵字用來定義一個(gè)類的內(nèi)聯(lián)函數(shù),引入它的主要原因是用它替代C中表達(dá)式形式的宏定義。
表達(dá)式形式的宏定義一例:
#define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)
為什么要取代這種形式呢,且聽我道來:
1.
首先談一下在C中使用這種形式宏定義的原因,C語言是一個(gè)效率很高的語言,這種宏定義在形式及使用上像一個(gè)函數(shù),但它使用預(yù)處理器實(shí)現(xiàn),沒有了參數(shù)壓棧,代碼生成等一系列的操作,因此,效率很高,這是它在C中被使用的一個(gè)主要原因。
2.
這種宏定義在形式上類似于一個(gè)函數(shù),但在使用它時(shí),僅僅只是做預(yù)處理器符號(hào)表中的簡單替換,因此它不能進(jìn)行參數(shù)有效性的檢測,也就不能享受C++編譯器嚴(yán)格類型檢查的好處,另外它的返回值也不能被強(qiáng)制轉(zhuǎn)換為可轉(zhuǎn)換的合適的類型,這樣,它的使用就存在著一系列的隱患和局限性。
3.
在C++中引入了類及類的訪問控制,這樣,如果一個(gè)操作或者說一個(gè)表達(dá)式涉及到類的保護(hù)成員或私有成員,你就不可能使用這種宏定義來實(shí)現(xiàn)(因?yàn)闊o法將this指針放在合適的位置)。
4. inline 推出的目的,也正是為了取代這種表達(dá)式形式的宏定義,它消除了它的缺點(diǎn),同時(shí)又很好地繼承了它的優(yōu)點(diǎn)。
為什么inline能很好地取代表達(dá)式形式的預(yù)定義呢?
對(duì)應(yīng)于上面的1-3點(diǎn),闡述如下:
1. inline 定義的類的內(nèi)聯(lián)函數(shù),函數(shù)的代碼被放入符號(hào)表中,在使用時(shí)直接進(jìn)行替換,(像宏一樣展開),沒有了調(diào)用的開銷,效率也很高。
2.
很明顯,類的內(nèi)聯(lián)函數(shù)也是一個(gè)真正的函數(shù),編譯器在調(diào)用一個(gè)內(nèi)聯(lián)函數(shù)時(shí),會(huì)首先檢查它的參數(shù)的類型,保證調(diào)用正確。然后進(jìn)行一系列的相關(guān)檢查,就像對(duì)待任何一個(gè)真正的函數(shù)一樣。這樣就消除了它的隱患和局限性。
3. inline 可以作為某個(gè)類的成員函數(shù),當(dāng)然就可以在其中使用所在類的保護(hù)成員及私有成員。
在何時(shí)使用inline函數(shù):
首先,你可以使用inline函數(shù)完全取代表達(dá)式形式的宏定義。
另外要注意,內(nèi)聯(lián)函數(shù)一般只會(huì)用在函數(shù)內(nèi)容非常簡單的時(shí)候,這是因?yàn)椋瑑?nèi)聯(lián)函數(shù)的代碼會(huì)在任何調(diào)用它的地方展開,如果函數(shù)太復(fù)雜,代碼膨脹帶來的惡果很可能會(huì)大于效率的提高帶來的益處。
當(dāng)前題目:c語言函數(shù)內(nèi)聯(lián),c語言有內(nèi)聯(lián)函數(shù)嗎
本文鏈接:http://www.yijiale78.com/article6/dsgooog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、用戶體驗(yàn)、自適應(yīng)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站收錄、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)