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

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 15:26:02974parcourir

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>
<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>

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>

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!

Déclaration:
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