ホームページ >バックエンド開発 >C++ >C で循環ヘッダー インクルードを処理するにはどうすればよいですか?

C で循環ヘッダー インクルードを処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 15:49:01330ブラウズ

 How to Handle Circular Header Inclusions in C  ?

C で相互にインクルードされるヘッダー

質問:
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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。