2013-07-22 37 views
2

我有兩個文件,第一個文件被稱爲main.cpp並且包含main函數,第二個文件被稱爲class.h並且包含一個類的聲明。
在同樣的兩個文件中我已經包含了<iostream>文件,因爲每個文件都需要那個文件 文件。我對包括衛兵有一些困惑

我想從第二個文件中檢查文件iostream是否已經包含在第一個文件main.cpp中,不再包含它。

我做什麼

// main.cpp 
#include <iostream> 
#include "class.h" 

//class.h 
#ifndef iostream_H 
#include <iostream> 
#endif 

是該代碼的權利?我怎樣才能確保它不會再次包含文件?

+4

標題本身(更確切地說是內部的包括守衛)照顧到了這一點。你不需要做任何事情。 – jrok

回答

6

「我想從第二個文件中檢查文件iostream是否已包含在第一個文件main.cpp中,不再包含它。」你不需要 - 包括你需要的任何文件 - 不要依賴它們被其他文件包含

<iostream>有它自己的守衛,所以即使它包含多次,沒關係。

如果class.hmain.cpp要求編譯<iostream>,則兩者都應該包含它。

+1

''有它自己的守衛,所以即使它包含多次,也沒關係。此規則是否符合所有包含的文件? –

+1

@LionKing是的,但是你必須在你自己編寫的頭文件中加入保護。 –

+0

@LionKing對於標準標題,標準不會說;需要執行該操作以便可以多次包含它們而沒有任何問題。對於你自己的頭文件,你必須提供你自己的包括守衛。 –

4

除了什麼Luchian Grigoresaid

由於您需要知道頭文件的內部細節,即警衛的名字,所以外部包含警衛(與OP中的那些警衛)違反了封裝。

此外,這些名稱不是標準化的,因此,外部包括警衛不是便攜式的。

因此,不要使用外部包含警衛。將內部包含的警衛添加到您自己的頭文件中,並確保其他人(包括標準庫)保持一致。

+0

感謝您提供良好的信息。 –

+0

@Lion King:Hakuna matata ;-)我很高興它有幫助。 –