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

Mary-Kate Olsen
リリース: 2024-10-27 15:49:01
オリジナル
228 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!