Heim >Backend-Entwicklung >C++ >Wie kann die Einbeziehung kreisförmiger Header in C vermieden werden?

Wie kann die Einbeziehung kreisförmiger Header in C vermieden werden?

Barbara Streisand
Barbara StreisandOriginal
2024-10-26 15:26:021044Durchsuche

How Can Circular Header Inclusion Be Avoided in C  ?

Header, die einander in C einschließen

C-Headerdateien können einander einschließen, aber bestimmte Richtlinien müssen befolgt werden, um Kompilierungsfehler zu vermeiden.

Platzierung von Include-Anweisungen

Include-Anweisungen sollten innerhalb Präprozessormakros, sogenannte Include-Guards, platziert werden, um mehrfache Einschlüsse zu verhindern. Dies ist besonders wichtig, wenn Header einander einschließen.

Forward-Deklarationen

Betrachten Sie den folgenden Code, in dem zwei Klassen, A und B, einander einschließen:

<code class="cpp">// A.h

#ifndef A_H_
#define A_H_

#include "B.h"

class A
{
public:
    A() : b(*this) {}

private:
    B b;
};

#endif</code>
<code class="cpp">// B.h

#ifndef B_H_
#define B_H_

#include "A.h"

class B
{
public:
    B(A& a) : a(a) {}

private:
    A& a;
};

#endif</code>

In diesem Szenario trifft der Compiler zuerst auf Klasse B, aber A wurde noch nicht deklariert. Um dieses Problem zu lösen, sollte eine Forward-Deklaration von A vor der Definition von B eingefügt werden:

<code class="cpp">// B.h

#ifndef B_H_
#define B_H_

class A;  // Forward declaration of class A

#include "A.h"

class B
{
public:
    B(A& a) : a(a) {}

private:
    A& a;
};

#endif</code>

Diese Forward-Deklaration informiert den Compiler darüber, dass A eine Klasse ist, auch wenn es sich um eine vollständige Definition handelt ist noch nicht verfügbar.

In der Praxis

Im Allgemeinen sollten #include-Anweisungen innerhalb von Include-Guards platziert werden, und Forward-Deklarationen sollten verwendet werden, wenn auf einen Header verwiesen werden muss zu einer Klasse, die in einem später eingefügten Header definiert wird. Durch Befolgen dieser Richtlinien können Sie Kompilierungsfehler vermeiden, die durch zirkuläre Includes verursacht werden.

Das obige ist der detaillierte Inhalt vonWie kann die Einbeziehung kreisförmiger Header in C vermieden werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn