我目前正在使用大量源文件編寫程序。有時很難跟蹤我已經擁有的庫d。理論上,我可以創建一個名爲Headers.h
的頭文件,它只包含我需要的所有#include
語句,然後將所有其他頭文件#include "Headers.h"
。帶有所有必要#include語句的單頭文件
爲什麼這是一個好/壞主意?
我目前正在使用大量源文件編寫程序。有時很難跟蹤我已經擁有的庫d。理論上,我可以創建一個名爲Headers.h
的頭文件,它只包含我需要的所有#include
語句,然後將所有其他頭文件#include "Headers.h"
。帶有所有必要#include語句的單頭文件
爲什麼這是一個好/壞主意?
優點:
缺點:
總的來說,我不會推薦這種方法。上面列出的最後一個con特別重要。
最佳做法是隻包含每個文件中代碼所需的標題。
作爲Harmic's answer的補充,確實主要的問題是編譯系統(大多數編譯器都是在文件時間戳上工作,而不是在文件內容上工作,omake
是一個值得注意的例外)。
請注意,如果你只關心很多依賴,GNU make可以用autodependencies使用,傳遞給GCC-M*選項(即以g++
,實際上給預處理器)在一起。
然而,許多庫提供給他們的用戶的單個報頭(例如<gtk/gtk.h>
)
另外,一個頭文件是更友好的預編譯頭技術。特別是,GCC wants a single header for precompilation。請參閱ccache。
追蹤所有需要的包括將更加困難,因爲它們是從它們的C源文件提取並沒有真正支撐模塊化膿所有從#harmic
的#include利弊<比特/ STDC++。H>包含大部分的庫...我不知道它是否包含所有庫... – Mukit09 2014-12-05 04:31:10
假設一些模塊evil.c需要evil.h,它重新定義了innocent.c中使用的一堆符號,也包含內聯函數定義,還有一些巨大的靜態數組聲明可以很好的衡量。你真的想在項目中的其他模塊中包含evil.h嗎? – 2014-12-05 04:34:22
這個想法的好處在於它與Microsoft的預編譯頭文件非常兼容。不幸的是,每個地方通常都包含許多你不需要或想要的東西。 – 2014-12-05 04:55:13