インクルード ガードをいつ使用するかは誰もが知っていますが、プロジェクトでそれを使用しない場合はいつでしょうか?
最近、ミックス コンパイル (CUDA + GCC) を使用するプロジェクトを見ましたが、1 つのヘッダー ファイル (CUDA ファイル) が意図的にインクルード ガードなしで残されています。私はちょうどそれについて興味があります。
インクルード ガードをいつ使用するかは誰もが知っていますが、プロジェクトでそれを使用しない場合はいつでしょうか?
最近、ミックス コンパイル (CUDA + GCC) を使用するプロジェクトを見ましたが、1 つのヘッダー ファイル (CUDA ファイル) が意図的にインクルード ガードなしで残されています。私はちょうどそれについて興味があります。
私の頭の上には2つのシナリオがあります:
assert.h
works)私たちのプロジェクトでは、インクルード ガードを使用することはありません。include アンチガードを使用しています。
#ifndef _stdafx_h_
#define _stdafx_h_
#else
#error reinclude stdafx.h
#endif
同じヘッダーを再インクルードした場合、間違ったコードを記述したか、間違ったアーキテクチャで作業したためです。
同じファイルを異なるパラメータで何度もインクルードしたい場合の 1 つのケース。この場合、インクルード ファイルは一種のテンプレートとして機能します。例として、Dosboxのスケーラーがあります。
インクルード ガードは、宣言が重複することなく、インクルード ファイルを 1 つのコンパイル単位に複数回インクルードできるようにするために使用されます。
ファイルを 1 つのコンパイル単位に複数回インクルードする必要がある場合は、インクルード ガードを使用しないでください。これによって宣言が重複することはありません。