回答
包含不需要的頭文件是很不好的做法。減慢編譯速度的問題可能或可能不重要;更大的問題是它隱藏依賴項。您在源文件中包含的頭文件集應該是模塊依賴於哪些功能的文檔,並且與外部文檔或註釋不同,它會由編譯器自動檢查完整性(未包含所需的頭文件將導致錯誤)。確保沒有不需要的依賴不僅可以提高可移植性,它還可以幫助您追蹤不需要的和潛在危險的交互,例如,應該是純粹計算的模塊或純數據結構管理的模塊正在訪問文件系統。
無論標題是標準系統標題還是您自己程序或第三方庫中模塊的標題,這些原則都適用。
不,這是一個可怕的想法,並會大量增加您的編譯時間,並可能通過包含大量未使用的代碼使您的exe文件變得更大。
這應該不會對exe文件大小產生任何影響。 –
@Oli - 可能正確的C - 我想更多的C++可以生成一個額外的模板代碼的負載。 –
您的源代碼文件在編譯器查看它們之前進行了預處理,#include
語句是預處理器使用的指令之一。預處理時,#include
語句被替換爲包含文件的全部內容。包含所有系統文件的結果將是編譯器需要處理的非常大的源文件,這將在編譯期間花費大量時間。
沒有人包含全部的頭文件。有太多,其中一些與其他文件互斥(如ncurses.h和curses.h)。
即使從頭開始編寫程序,確實不是那麼糟糕。有幾個很容易記住:stdio.h對於任何FILE
的東西;文件ctype.h任何字符分類,alloc.h任何使用malloc()的,等
如果你不記得一個:
- 離開
#include
出 - 編譯
- 首先檢查幾個錯誤消息,以指示缺少的頭文件(如某些未聲明的類型)或調用具有假定參數類型的函數
- 找出哪個函數調用是原因
- 看看man頁面(或其他文檔的編譯器),該功能
- 通知由文檔顯示的
#include
,並將其添加 - 重複,直到固定所有的錯誤
這是一個相當容易一點用於添加到現有的代碼庫。您可能需要數百或數千個工作小時,而且無需添加#include
。
我知道你在說什麼,但我需要仔細檢查我正在使用的函數的函數原型(對於我不是每天都使用的函數) - 我只需複製並將#includes
直接粘貼到相關功能的聯機幫助頁中。我已經在查看聯機幫助頁(這是一個簡單的K
,位於vim(1)
),所以它不會感覺到額外的負擔。
您可以創建一個「主」標頭,在其中放入所有包含。然後在其他一切包括它!謹防衝突的定義和循環引用......所以...... Master1.h,master2.h,...
不提倡它。只是說。
- 1. 包含所有其他頭文件的單頭文件?
- 2. 如何包含所有boost頭文件?
- 3. 確定是否所有需要的頭文件都包含在另一個頭文件中
- 4. 使用包中的單個文件是否包含所有文件?
- 5. 確定文本正文是否包含有效單詞或只是「亂碼」
- 6. 確定目錄是否包含文件
- 7. 是否包含ejs部分正確的文件路徑?
- 8. 包含模塊,是否正確?
- 9. 從php中提取包含正文部分的所有郵件頭文件
- 10. C文件包含的所有頭文件的列表
- 11. 如何「觸摸」包含特定頭文件的所有文件?
- 12. 如何列出包含頭文件中的所有文件
- 13. 野牛-d創建頭文件不能包含頭文件正確
- 14. 包含頭文件
- 15. 所有以太網幀是否包含LLC頭?
- 16. 將單個文件包含在Java VM的-classpath參數中是否正確?
- 17. TestNG.xml套件包含所有文件包所有文件
- 18. 如何正確包含Cython頭文件(setup.py)?
- 19. 在Eclipse中包含正確版本的頭文件CDT
- 20. 當包含不同的頭文件時,C實現是否可以隱式地包含標準頭文件?
- 21. 確定字典是否包含所有的一組鍵
- 22. 確定ResultSet中的列是否包含所有行中的值
- 23. C#確定是否詞典包含所有的一組值
- 24. 正則表達式來確定字符串是否包含所有的元音?
- 25. 愚蠢的數據對象包含所有常見值C++,這是否正確
- 26. 正確使用包含文件
- 27. 包含文件的正確方法
- 28. 正確包含x32或x64 System.Data.SQLite.dll文件
- 29. 臨時文件與所有包含的標頭的內容
- 30. WebBrowser.DocumentText是否也包含所有框架文檔文本?
如果記住這樣的痛苦,你可以使用eclipse及其「添加包含」功能。 – Nate
當然「有辦法」。但這不是一個好主意。也許更有經驗的C程序員只知道*他們的依賴關係是在哪裏聲明的,並且只包含他們需要的全部意識。 –
如果這是一個好主意 - 整個語言只有1個頭文件 –