2011-11-12 62 views
1

記住系統頭文件的名稱是一種痛苦...簡單包含所有頭文件是否正確?

有沒有辦法一次包含所有現有的頭文件?

爲什麼沒有人這樣做?

+0

如果記住這樣的痛苦,你可以使用eclipse及其「添加包含」功能。 – Nate

+0

當然「有辦法」。但這不是一個好主意。也許更有經驗的C程序員只知道*他們的依賴關係是在哪裏聲明的,並且只包含他們需要的全部意識。 –

+1

如果這是一個好主意 - 整個語言只有1個頭文件 –

回答

8

包含不需要的頭文件是很不好的做法。減慢編譯速度的問題可能或可能不重要;更大的問題是它隱藏依賴項。您在源文件中包含的頭文件集應該是模塊依賴於哪些功能的文檔,並且與外部文檔或註釋不同,它會由編譯器自動檢查完整性(未包含所需的頭文件將導致錯誤)。確保沒有不需要的依賴不僅可以提高可移植性,它還可以幫助您追蹤不需要的和潛在危險的交互,例如,應該是純粹計算的模塊或純數據結構管理的模塊正在訪問文件系統。

無論標題是標準系統標題還是您自己程序或第三方庫中模塊的標題,這些原則都適用。

1

不,這是一個可怕的想法,並會大量增加您的編譯時間,並可能通過包含大量未使用的代碼使您的exe文件變得更大。

+5

這應該不會對exe文件大小產生任何影響。 –

+0

@Oli - 可能正確的C - 我想更多的C++可以生成一個額外的模板代碼的負載。 –

5

您的源代碼文件在編譯器查看它們之前進行了預處理,#include語句是預處理器使用的指令之一。預處理時,#include語句被替換爲包含文件的全部內容。包含所有系統文件的結果將是編譯器需要處理的非常大的源文件,這將在編譯期間花費大量時間。

5

沒有人包含全部的頭文件。有太多,其中一些與其他文件互斥(如ncurses.h和curses.h)。

即使從頭開始編寫程序,確實不是那麼糟糕。有幾個很容易記住:stdio.h對於任何FILE的東西;文件ctype.h任何字符分類,alloc.h任何使用malloc()的,等

如果你不記得一個:

  • 離開#include
  • 編譯
  • 首先檢查幾個錯誤消息,以指示缺少的頭文件(如某些未聲明的類型)或調用具有假定參數類型的函數
  • 找出哪個函數調用是原因
  • 看看man頁面(或其他文檔的編譯器),該功能
  • 通知由文檔顯示的#include,並將其添加
  • 重複,直到固定所有的錯誤

這是一個相當容易一點用於添加到現有的代碼庫。您可能需要數百或數千個工作小時,而且無需添加#include

1

我知道你在說什麼,但我需要仔細檢查我正在使用的函數的函數原型(對於我不是每天都使用的函數) - 我只需複製並將#includes直接粘貼到相關功能的聯機幫助頁中。我已經在查看聯機幫助頁(這是一個簡單的K,位於vim(1)),所以它不會感覺到額外的負擔。

1

您可以創建一個「主」標頭,在其中放入所有包含。然後在其他一切包括它!謹防衝突的定義和循環引用......所以...... Master1.h,master2.h,...

不提倡它。只是說。

相關問題