2013-03-14 51 views
4

我有一個關於頭文件,包含語句和良好編碼風格的簡短問題。假設我有2個關聯了源文件和頭文件的類,然後是main()所在的最終源文件。頭文件和包含最佳做法

在Foo.hpp我有以下語句:

#include <string> 
#include <iostream> 
#include <exception> 

現在withing Bar.hpp我有以下語句:

#include "Foo.hpp" 
#include <string> 

最後withing Myprogram.cpp我有以下語句:

#include "Bar.hpp" 
#include <string> 
#include <iostream> 
#include <exception> 

我知道包括在<>在Myprogram.cpp和Bar.hpp中不是程序編譯和運行所必需的,但最佳實踐或正確的做事方式是什麼?是否有任何理由不在每個文件中明確包含必要的頭文件?

+0

在「Foo.hpp」中,你使用字符串,流或異常嗎? – 2013-03-14 21:56:31

回答

9

應該包括所有必要的文件在每個需要它們的文件中。如果MyProgram.cpp需要string,請將其包括在內,而不要依賴於Bar.hpp。從現在開始Bar.hpp仍然包含它,不保證2周,然後您將留下編譯器錯誤。

注意必要 - 即確保您實際上需要一個包含,當一個前向聲明或甚至完全離開它將做。

此外,請注意,某些系統標題可能包含其他 - 除少數例外情況外,沒有要求。因此,如果您同時需要<iostream><string>兩種版本,即使只能使用其中一種進行編譯。

包含出現的順序(系統包含vs用戶包含)取決於您遵循的編碼標準 - 一致性比選擇本身更重要。

+1

但是反過來也是如此,除非你確實需要它們(即不要包含),否則你不應該包含頭文件(在頭文件中)。 – 2013-03-14 21:57:44

+0

@LokiAstari true。 – 2013-03-14 22:00:29

+0

有道理。謝謝。 – boulderprog 2013-03-14 22:07:08

2

包含您在每個文件中需要的所有文件,,但不包含任何不需要的文件。通常情況下,它是包含文件的工作,以確保它不包含兩次,使用預編譯的標誌,等...

例如,如果是由Foo.cpp需要的,而不是由Foo.h,包括它在Foo.cpp沒有Foo.h。如果兩者都有要求,則包括在兩者中。

切線方向,作爲最佳實踐,切勿在頭文件中使用using指令。如果您需要,您可以在實現文件(.cpp)中使用using指令。