18

インクルード ガードをいつ使用するかは誰もが知っていますが、プロジェクトでそれを使用しない場合はいつでしょうか?

最近、ミックス コンパイル (CUDA + GCC) を使用するプロジェクトを見ましたが、1 つのヘッダー ファイル (CUDA ファイル) が意図的にインクルード ガードなしで残されています。私はちょうどそれについて興味があります。

4

4 に答える 4

13

私の頭の上には2つのシナリオがあります:

  1. デバッグ機能をオン/オフしたいとき (how assert.hworks)
  2. インクルードファイルを持っている「x-macro」タイプの機能の場合、列挙型を定義してから列挙型に対応する文字列化された名前の配列を定義するなど、問題の2つの部分を実行します
于 2011-07-22T16:39:19.997 に答える
3

私たちのプロジェクトでは、インクルード ガードを使用することはありません。include アンチガードを使用しています。

#ifndef _stdafx_h_
#define _stdafx_h_
#else
#error reinclude stdafx.h
#endif

同じヘッダーを再インクルードした場合、間違ったコードを記述したか、間違ったアーキテクチャで作業したためです。

于 2015-09-17T10:30:09.897 に答える
3

同じファイルを異なるパラメータで何度もインクルードしたい場合の 1 つのケース。この場合、インクルード ファイルは一種のテンプレートとして機能します。例として、Dosboxのスケーラーがあります。

于 2011-07-22T16:44:04.917 に答える
0

インクルード ガードは、宣言が重複することなく、インクルード ファイルを 1 つのコンパイル単位に複数回インクルードできるようにするために使用されます。

ファイルを 1 つのコンパイル単位に複数回インクルードする必要がある場合は、インクルード ガードを使用しないでください。これによって宣言が重複することはありません。

于 2011-07-22T16:44:17.707 に答える