名前空間内のすべてのクラスを前方宣言する単純なヘッダーファイルがあります。
#ifndef TEST_FWD_HPP
#define TEST_FWD_HPP
namespace a {
namespace b {
class A;
class B;
}
}
#endif
このファイルは複数のインクルードから保護する必要があります(#ifndef
...)?これは前方宣言にのみ意味がありますか?
名前空間内のすべてのクラスを前方宣言する単純なヘッダーファイルがあります。
#ifndef TEST_FWD_HPP
#define TEST_FWD_HPP
namespace a {
namespace b {
class A;
class B;
}
}
#endif
このファイルは複数のインクルードから保護する必要があります(#ifndef
...)?これは前方宣言にのみ意味がありますか?
通常、このようなヘッダーファイルを保護することをお勧めします。ほとんどの場合、ファイルが1回だけインクルードされる必要はありませんが、プロジェクトが複雑になり、ヘッダーファイルが他のヘッダーファイルにインクルードされると、正気を保つのに役立ちます。
フォワード定義と関数プロトタイプしかない場合は、通常は必要ありませんが、ヘッダーファイルは時間の経過とともに処理される傾向があるため、当然のことながら実行する価値があります。
複数のインクルードガードは、複数の宣言エラーを処理するだけではありません。無限のインクルージョンループを回避するために、これらのガードをすべてのヘッダーファイルに挿入する必要があります。
(正式には非標準)#pragma once
を使用するだけで、それで完了です。
同じ翻訳単位に複数のインクルードが含まれないようにするだけでなく、ヘッダー ガードまたは#pragma once
精通したコンパイラがファイルを再スキャンするのを回避します。