ヘッダー ファイルの内容がプリプロセッサによってソース コード ファイルに複数回挿入されるのを防ぐために、ヘッダー ファイルにヘッダー ガードを含めることを推奨する人がいるのを知っています。
ただし、次のシナリオを検討してください。
ファイルmain.cpp
、stuff.cpp
、およびcommonheader.h
があり、.h
ファイルにはヘッダー ガードがあるとします。
いずれかの.cpp
ファイルがcommonheader.h
複数回インクルードしようとすると、プリプロセッサはそれを停止し、オブジェクト コードにコンパイルした後、
main.o
commonheader.h の内容を1 回だけ含む。
stuff.o
commonheader.h の内容を1 回だけ含む。
commonheader の内容はファイル間で繰り返されていますが、同じ.o
ファイル内では繰り返されていないことに注意してください。
では、リンクの段階で何が起こるのでしょうか? .o ファイルが実行可能ファイルに融合されているため、commonheader の内容が繰り返されていないことを再度確認する必要があります。コンパイラはそれを処理しますか?そうでない場合、巨大なヘッダー ファイルを扱っているときに問題になりません。ファイル間でコードの繰り返しが発生し、実行可能ファイルのサイズが大きくなります。
質問のどこかで概念的な間違いを犯している場合は、修正してください。