欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
當一個(gè)庫被連接到目標上時(shí),庫中的所有函數是否都會(huì )被加到一個(gè).EXE文件中?

不會(huì )。當啟動(dòng)連接程序時(shí),它會(huì )尋找“未定義的外部函數”,也就是說(shuō),它將在每一個(gè)庫文件中查找源代碼文件中未定義的函數。當它找到一個(gè)未定義的外部函數后,它會(huì )引入包含該函數定義的目標代碼。(obj)。不幸的是,如果這個(gè)函數是在一個(gè)包含其它函數定義的源文件中被編譯的話(huà),那么這些函數也會(huì )被包含進(jìn)來(lái),你的可執行代碼中將包含一些不需要的代碼。因此,將庫函數放到各自的源文件中是很重要的——否則會(huì )浪費寶貴的程序空間。有些編譯程序包含
特殊的“精明的”連接程序,這些連接程序能查出不需要的函數并去掉它們,從而使這些函數不再進(jìn)入你的程序。

下面舉一個(gè)例子:假設有兩個(gè)源文件,分別為libfunc1.c和libfunc2.c,它們所包含的函數都要被放到一個(gè)庫中。源文件libfunc1.c包含以下兩個(gè)函數:
    void func_one ()
    {
       ...
    }
    void rune_two()
    {
       ...
    }

源文件libfunc2.c包含以下函數:
    void func_three()
    {
       ...
    }
現在假設已經(jīng)把這兩個(gè)源文件編譯到一個(gè)名為myfuncs.1ib的庫中。如果一個(gè)與myfuncs.lib連接的程序要調用func_one()函數,連接程序就會(huì )在myfuncs.lib庫中尋找包含func_one()函數定義的目標代碼,并且把它連接進(jìn)來(lái)。不幸的是,函數func_one()是在包含func_two()函數定義的同一個(gè)源文件中被編譯的,因此,即使你的程序不會(huì )用到func_two(),連接程序也不得不把它連接進(jìn)來(lái)。當然,這里假設func_one()中并沒(méi)有包含對func_two()的調用。如果一個(gè)程序包含一個(gè)對func_three()的調用,那么只有func_othree()的目標代碼會(huì )被連接進(jìn)來(lái),因為該函數是在它自己的源文件中被編譯的。

一般說(shuō)來(lái),你應該盡量把庫函數放到各自的源文件中。這種組織方式有助于提高程序的效率,因為程序只會(huì )和那些真正需要的函數進(jìn)行連接,而不會(huì )和那些不需要的函數進(jìn)行連接。這種組織方式在小組開(kāi)發(fā)的情況下也是很有幫助的;在小組開(kāi)發(fā)中,源文件的上交和發(fā)放非常頻繁,如果一個(gè)程序員要對一個(gè)包含在其自身的源文件中的函數進(jìn)行維護,那么他可以集中維護這個(gè)函數;如果這個(gè)函數所在的源文件中還包含其它一些需要維護的函數,那么這些函數就無(wú)法發(fā)放給其它小組成員,因為它們包含在一個(gè)源文件中。

---------------
可以把多個(gè)庫函數包含在同一個(gè)源文件中嗎?
在同一個(gè)源文件中,你想要定義多少個(gè)函數,就可以定義多個(gè)函數,并且可以把它們都包含到一個(gè)庫中——然而,在小組開(kāi)發(fā)環(huán)境中連接程序和共享源文件時(shí),這種編程風(fēng)格存在著(zhù)嚴重的缺陷。
當你在一個(gè)源文件中包含多個(gè)庫函數時(shí),這些函數會(huì )被編譯到同一個(gè)目標(.obj)文件中。當連接程序要把其中的一個(gè)函數連接到程序中去時(shí),目標文件中的所有函數都將被連接進(jìn)來(lái)---不管程序是否用到它們。如果這些函數是無(wú)關(guān)的(在它們的定義中沒(méi)有相互調用),那么會(huì )因為把不需要的代碼連接進(jìn)來(lái)而浪費寶貴的程序空間,見(jiàn)18.7中的例子。這就是要把庫函數放到各自的源文件中的原因之一。
另一個(gè)原因是為了在小組開(kāi)發(fā)環(huán)境下便于進(jìn)行代碼共享。使用獨立的源文件能使小組程序員上交和收回單獨一個(gè)函數,而不必先鎖住源文件中的一些函數,然后才能修改源文件中的其它函數。
為什么要建立一個(gè)庫?
建立一個(gè)數據庫是為了把可重復使用的函數放在一起,供其它程序員和程序共享。例如,你的幾個(gè)程序可能都會(huì )用到一些通用的功能函數,你不必在每個(gè)程序中都復制這些源代碼,而只需把這些函數集中到一個(gè)函數庫中,然后用連接程序把它們連接到你的程序中去。這種方法有利于程序的維護,因為你可以在一個(gè)集中的地方而不是幾個(gè)分散的地方維護你的函數。
如果你在小組環(huán)境中工作,那么你應該把你的可重復使用的函數放到一個(gè)庫中,這樣其它小組成員就可以把你的函數連接到他們的程序中去,從而節省了他們復制或從頭開(kāi)始寫(xiě)這些函數的時(shí)間。此外,在一個(gè)包含幾個(gè)模塊的大項目中,可以把那些自始至終都要用到的“框架”支持函數包含到一個(gè)庫中。
編譯程序中包含一個(gè)庫管理器(通常叫做LIB.EXE或其它類(lèi)似的名字),可用來(lái)在函數庫中增減目標代碼模塊(.obj)。有些編譯程序允許你在它們的集成開(kāi)發(fā)環(huán)境中維護你的庫,而不必人為地啟動(dòng)庫管理器。無(wú)論如何,你都應該參考一下18.7和18.8。其中有一些有關(guān)建庫的重要信息和有用的技巧。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
linux下 怎樣把代碼編譯成庫?
編寫(xiě)第一個(gè)C語(yǔ)言程序
gcc的使用簡(jiǎn)介與命令行參數說(shuō)明
數組拾遺
linux靜態(tài)庫的生成與使用
Linux下如何編譯并運行C程序
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久