2012-07-31 42 views
1

我在我的C程序中有大量的包含。在開發過程中,我嘗試了不同的做事方式,所以我敢打賭,我已經包含了一些我已經包含但未被使用的庫。我可以知道我的C程序中包含哪些庫實際上被使用了嗎?

該編譯器擺脫未使用的庫嗎?有沒有可以告訴我的工具?即使編譯器確實擺脫了代碼,如果我可以擺脫一些東西,它會清理源代碼。

+3

通常'從標準庫#include's只是提供原型和聲明,即只存在在編譯時所有的東西,所以我假設他們可能只是在放慢彙編速度;但是,清理不必要的源頭肯定是一件好事。 – 2012-07-31 15:16:09

+2

您正在使用哪個工具鏈?編譯器不會刪除死代碼,但鏈接器可以。 – user7116 2012-07-31 15:16:46

+1

查看此鏈接: http://stackoverflow.com/questions/51561/how-do-i-automate-finding-unused-include-directives – heretolearn 2012-07-31 15:24:40

回答

2

它實際上並沒有那麼決定什麼最後進入可執行的編譯器,但鏈接。現代鏈接器足夠聰明,除非使用代碼,否則不能從庫中提取代碼。所以你可以鏈接到數百個庫,但是如果你不在其中調用任何函數,那麼他們不會向你的程序添加任何代碼。

至於標題文件,大多數不包含任何比申報和預處理器宏的更多,而那些不會自行添加代碼。包含許多頭文件的最大缺點是會減慢編譯源文件的速度。

1

沒有,工具包將在你告訴它鏈接的任何庫鏈接。您可以運行通過工具如Doxygen的,這將產生如何你的代碼被用於文檔的頁面和圖表你的源代碼,但它不一定會告訴你是否正確或有效地使用圖書館。

它是由程序員來確定庫是必要的,要慎重選擇執行該程序需要哪些庫。不必要的內容會增加編譯時間,並且可能會膨脹二進制文件。

相關問題