2013-10-16 43 views
-3

我對學習C++很感興趣,對於多頭文件的用途我很好奇。爲什麼你不能在一個頭文件中包含所有東西?爲什麼你使用多個頭文件?

+0

目前尚不清楚「一切」是什麼意思。 –

+2

出於同樣的原因,您不會將所有文件放在桌面上,或將所有電子郵件保留在收件箱 - 組織中。 –

回答

0

是的,你可以擁有一個頭文件。然而,隨着項目的增長,這個頭文件很快就會變成一個難以維護且速度慢的混亂。

1

可以擁有在一個頭文件中的一切。你甚至可以將你的整個程序放在一個文件中。

把事情分成不同的小文件的好處是你一次編譯小部分,你只需要重新編譯組件已經改變的那些部分。您還可以將通用代碼放入單獨的文件中,並使用單獨項目中的這些文件,而無需在項目中複製粘貼代碼。所以如果你發現一個bug,你可以修復一次,所有的項目都能從修復中受益。

2

爲什麼你不能只在一個頭文件中包含所有東西?

如果您將所有內容都塞進單個標頭,那麼對該標頭的每一次更改都將導致包含該標頭的每個文件的重新編譯。在你的情況下,這將是整個項目。

當您有很多小文件並且只有在絕對必要時才包含它們,管理項目會更容易。

3

關鍵字這裏是模塊化

模塊化是可被分離並重新組合的系統的部件的程度。

正如其他人已經提到的那樣,您可以在單個文件中編寫程序。而且,你可以把它寫在一行中。但是,你不這樣做,因爲單獨的重新組合這個程序的一部分,如果它不編譯就更不用說調試了。

1

標題存在組織。

對於一個非常簡單的項目,一個頭文件可以做得很好。你甚至可以根本不使用頭文件,只需將所有內容寫入單個文件。

但是,一旦你成長爲一個更大的項目,其中包含並行系統,在多個上下文中使用的類或僅使用第三方庫(如OpenSSL或MySQL),您不能簡單地期望將所有代碼放入具有數百萬行代碼的單個文件。

您可能還想知道爲什麼不在您的項目中將所有和任何必需的標題放在一個「common.h」中,然後在每個.cpp中輸入#include

答案是,因爲每個.cpp單獨編譯,所以,如果你限制了頭部的每個.cpp只需要什麼的話,你會同時降低所產生的.obj大小和編譯時間。

此外,每次更改任何標題時,您都將被迫重新編譯整個項目,而不是僅重新編譯涉及的.cpp

0

除了已經發布的所有答案,你可能要考慮的是C++有哲學你付出你用什麼或者相反,你不支付你不使用

如果我的應用需求,說,複數,然後我繼續前進,#include此功能。如果我不需要它,那麼爲什麼我的代碼甚至應該意識到這樣的概念存在,沒有任何理由。

當我確定我保持一遍又一遍,包括相同的頭文件對於給定類型的應用程序,我創建一個主頭文件,其包括包括,我只是#include那一個。

例如:

// @file project.hpp 
// @brief provides all the functionality required by `project` 
#include<library1.hpp> 
#include<library2.hpp> 
#include<library3.hpp> 
// any type definitions go below this line 

,然後,在我的項目

boost
// @file project.cpp 
// @brief Implements `project` 
#include<project.hpp> 
// go ahead and implement project 

其他庫通常提供一個「主」包括文件,例如使用如上所述的簡化一個圖書館。

相關問題