2014-06-05 61 views
2

我仍然習慣於使用C/C++,我不想'過度包含'庫。我應該在哪裏包括<string>?

我有一個標題,我想放置讀取輸入數據的方法以及那些我稱之爲ofun.h的變量,因爲它處理有關我試圖優化的目標函數的信息。在這個頭文件中,我需要將數據的名稱定義爲string data_name;

我應該在#include <string>這個頭文件裏面嗎?如果發生這種情況,我包括另一頭文件<string>,說file_io.h,然後在我的主程序我叫

#include <string> 
#include "ofun.h" 
#include "file_io.h" 

這會帶來問題?如果是這樣,那麼包含這種標準庫的最佳方式/地點是什麼,以便它們不會相互碰撞?

+1

#ifndef ..#endif衛兵會照顧它。如果你在非常慢的設備上編譯(如軟盤),這只是一個問題。 – cup

回答

6

如果頭文件中的任何內容需要包含在<string>中的聲明,我會繼續並將其包含在頭文件中。確保頭文件不碰撞的最佳做法是使用包含防護:http://en.wikipedia.org/wiki/Include_guard。基本上,你周圍的聲明在頭這個:

#ifndef OFUN_H_ 
#define OFUN_H_ 

//your header here 

#endif 

這一點,例如,你會把什麼ofun.h.所有的標準庫頭文件都已經包含了include guard,你只需要確保將它們放在你自己的頭文件中。

+0

謝謝,我在'__ofun__'上使用了包含內容,但不確定它是否在防止''包含'雙重包含'' – drjrm3

+2

所有標準C++頭文件都包含了包含內容,因此您甚至可以輸入'#在同一個文件中連續三次包括,並且沒有什麼不好的事情會發生。顯然,雖然這不會實際完成任何事情,但堅持只包括一次。 – wolfPack88

+0

請不要建議使用[保留名稱](http://stackoverflow.com/questions/228783)作爲包含守衛。 –

1

如果你需要這個庫inun.h例如,然後將它包含在那裏。 如果你在inun.h和包含of.h的文件中都需要它,你可以只在inun.h中包含它。

1

不要害怕。爲了一致起見,即使包含重複標題的鏈包含在每個使用此頭中聲明的標識符的文件中,也需要放置每個標頭。

衛兵會關心你。