3

名前空間内のすべてのクラスを前方宣言する単純なヘッダーファイルがあります。

#ifndef TEST_FWD_HPP
#define TEST_FWD_HPP

namespace a {
    namespace b {

            class A;
            class B;

    }
}

#endif

このファイルは複数のインクルードから保護する必要があります(#ifndef...)?これは前方宣言にのみ意味がありますか?

4

3 に答える 3

5

通常、このようなヘッダーファイルを保護することをお勧めします。ほとんどの場合、ファイルが1回だけインクルードされる必要はありませんが、プロジェクトが複雑になり、ヘッダーファイルが他のヘッダーファイルにインクルードされると、正気を保つのに役立ちます。

フォワード定義と関数プロトタイプしかない場合は、通常は必要ありませんが、ヘッダーファイルは時間の経過とともに処理される傾向があるため、当然のことながら実行する価値があります。

于 2012-10-07T08:45:10.377 に答える
2

複数のインクルードガードは、複数の宣言エラーを処理するだけではありません。無限のインクルージョンループを回避するために、これらのガードをすべてのヘッダーファイルに挿入する必要があります。

于 2012-10-07T08:45:38.973 に答える
2

(正式には非標準)#pragma onceを使用するだけで、それで完了です。

同じ翻訳単位に複数のインクルードが含まれないようにするだけでなく、ヘッダー ガードまたは#pragma once精通したコンパイラがファイルを再スキャンするのを回避します。

于 2012-10-07T08:51:54.993 に答える