問題是關於包含一個不必要的頭,以避免在子文件中多次調用它。 這裏的情況,我有幾個文件:C++「額外」頭文件
srlogger.h
srinterface.h
srinterface.cc
#include <srinterface.h>
#include "srlogger.h"
srbinhttp.h
#include "srinterface.h"
srbinhttp.cc
#include <srbinhttp.h>
#include "srlogger.h"
srsocket.h
#include "srinterface.h"
srsocket.cc
#include <srsocket.h>
#include "srlogger.h"
srhttp.h
#include "srinterface.h"
srhttp.cc
#include <srhttp.h>
#include "srlogger.h"
現在,我想要做的就是刪除所有顯示的.cc文件#include "srlogger.h"
,而是它包括對srinterface.h
文件:
srinterface.h
#include "srlogger.h"
因爲所有的.cc文件都包含srinterface.h,所以srlogger.h會被覆蓋。 現在,爲什麼這會很糟糕?
請不要說你只應該包含必要的頭文件來編譯而沒有額外的東西,這是不夠的解釋。
我想知道在實際的例子,爲什麼這將是壞的。
哦,如果有人從srinterface.h
中刪除#include "srlogger.h"
它會破壞另一個文件,這是一個弱解釋。包含後的評論很容易提醒其他人。
最讓我感興趣的是如果它會以不好的方式影響編譯,那麼對象或可執行文件的大小會因此而改變,這會影響性能嗎?
或者你有一個很好的解釋,爲什麼這是不好的。
PS:如果您好奇我爲什麼要這麼做,是因爲我在映射文件之間的依賴關係,並且做了這樣的事情,我可以在所有依賴關係之間創建圖形化可視化,從而更容易瞭解拼圖的各個部分如何組合在一起。將子標題傳送到較高層級標題中的公共標題將在所有文件之間創建更有組織的結構。
這並沒有解決這個問題,但使用'#包括<...>'系統頭和'#包括「...」'爲自己的頭。 –
@佩特貝克爾 - 我不反對,但你應該解釋*爲什麼*。另外,如果你告訴你的編譯器關於你自己的包含目錄,那麼使用「<>」就可以了。在任何情況下,你的評論並沒有解釋這兩種形式之間的差異,而只是說「做這個」,這實際上並沒有那麼有用。 –
@JesperJuhl - 我會同意,如果這是一個答案。但事實並非如此,而且也不是爲了解決這個問題,而是短暫的,而不是爲了開始討論。 –