Heim > Backend-Entwicklung > C++ > Hauptteil

Wie gehe ich mit kreisförmigen Header-Einschlüssen in C um?

Mary-Kate Olsen
Freigeben: 2024-10-27 15:49:01
Original
228 Leute haben es durchsucht

 How to Handle Circular Header Inclusions in C  ?

Header, die einander in C einschließen

Frage:
Wenn Sie mit mehreren Headerdateien in C arbeiten, sollten die #include-Anweisungen vorhanden sein? innerhalb oder außerhalb von Makros platziert? Was passiert konkret, wenn zwei Klassen einander einschließen?

Antwort:

Makroplatzierung:
#include-Anweisungen sollten immer platziert werden innerhalb der Makros (#ifndef include Guards), um eine unendliche Rekursion während der Kompilierung zu verhindern.

Zirkuläre Einschlüsse:
Zirkuläre Einschlüsse treten auf, wenn zwei Klassen die Header der anderen enthalten. Um dieses Problem zu lösen, sollte eine Vorwärtsdeklaration verwendet werden, bevor eine Klasse definiert wird, die einen Verweis auf eine andere Klasse enthält.

Beispiel:

Beachten Sie die folgenden Header-Dateien A.h und 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>
Nach dem Login kopieren

Hauptfunktion:

<code class="cpp">// main.cpp
#include "A.h"

int main() {
  A a;
}</code>
Nach dem Login kopieren

Erklärung:

Circular Inclusion Issue: Wenn die #include-Anweisungen außerhalb der Makros platziert würden, würde der Compiler beim Versuch, beide Header einzuschließen, auf eine unendliche Rekursion stoßen.

Forward-Deklaration: In B.h eine Forward-Deklaration der Klasse A; verwendet wird. Dies informiert den Compiler darüber, dass A eine Klasse ist, ohne deren Definition einzubeziehen. Dies ermöglicht es B, einen Verweis auf A zu deklarieren.

Reihenfolge der Einschlüsse: Die Reihenfolge der Header-Einschlüsse ist ebenfalls wichtig. A.h muss vor B.h eingefügt werden, um die Vorwärtsdeklaration zu ermöglichen.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit kreisförmigen Header-Einschlüssen in C um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!