質問:
C で複数のヘッダー ファイルを操作する場合、 #include ステートメントは次のようにする必要があります。マクロの内側または外側に配置されますか?具体的には、2 つのクラスが互いにインクルードするとどうなりますか?
答え:
マクロの配置:
#include ステートメントは常に配置する必要があります。
循環インクルージョン:
循環インクルージョンは、2 つのクラスが互いのヘッダーをインクルードする場合に発生します。これを解決するには、別のクラスへの参照を含むクラスを定義する前に、前方宣言を使用する必要があります。
例:
次のヘッダー ファイル A.h および B.h について考えてみましょう。 :
<code class="cpp">// A.h #ifndef A_H_ #define A_H_ #include "B.h" // Circular inclusion class A { B b; }; #endif // B.h #ifndef B_H_ #define B_H_ class A; // Forward declaration class B { A& a; }; #endif</code>
メイン関数:
<code class="cpp">// main.cpp #include "A.h" int main() { A a; }</code>
説明:
循環インクルージョンの問題: #include ステートメントがマクロの外側に配置されている場合、コンパイラーは両方のヘッダーをインクルードしようとしているときに無限再帰に遭遇します。
前方宣言: B.h では、クラスの前方宣言A;が使用されます。これにより、その定義は含めずに、A がクラスであることがコンパイラーに通知されます。これにより、B が A への参照を宣言できるようになります。
包含順序: ヘッダーの包含順序も重要です。前方宣言を可能にするには、A.h を B.h の前に含める必要があります。
以上がC で循環ヘッダー インクルードを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。