Maison > développement back-end > C++ > Comment éviter l'inclusion d'en-têtes circulaires en C ?

Comment éviter l'inclusion d'en-têtes circulaires en C ?

Barbara Streisand
Libérer: 2024-10-26 15:26:02
original
1033 Les gens l'ont consulté

How Can Circular Header Inclusion Be Avoided in C  ?

En-têtes s'incluant les uns les autres en C

Les fichiers d'en-tête C peuvent s'inclure les uns les autres, mais certaines directives doivent être suivies pour éviter les erreurs de compilation.

Placement des instructions d'inclusion

Les instructions d'inclusion doivent être placées à l'intérieur des macros du préprocesseur, connues sous le nom de gardes d'inclusion, pour éviter les inclusions multiples. Ceci est particulièrement important lorsque les en-têtes s'incluent.

Déclarations avancées

Considérez le code suivant où deux classes, A et B, s'incluent :

<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>
Copier après la connexion
<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>
Copier après la connexion

Dans ce scénario, le compilateur rencontre d'abord la classe B, mais A n'a pas encore été déclarée. Pour résoudre ce problème, une déclaration directe de A doit être incluse avant la définition de B :

<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>
Copier après la connexion

Cette déclaration directe informe le compilateur que A est une classe, même si sa définition complète n'est pas encore disponible.

En pratique

En général, les instructions #include doivent être placées à l'intérieur des gardes d'inclusion, et les déclarations forward doivent être utilisées lorsqu'un en-tête doit faire référence à une classe définie dans un en-tête inclus ultérieurement. En suivant ces directives, vous pouvez éviter les erreurs de compilation causées par les inclusions circulaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal