Les gardes d'inclusion do protègent les fichiers d'en-tête d'une inclusion mutuelle et récursive.
Le problème se pose lorsqu'il existe des dépendances entre les définitions des structures de données dans des en-têtes qui s'incluent mutuellement. Par exemple :
// a.h #include "b.h" struct A { ... }; // b.h #include "a.h" struct B { A* pA; // error: class A is forward-declared but not defined };
Pour résoudre ce problème, les déclarations forward doivent être utilisées au lieu des gardes d'inclusion :
// b.h #include "a.h" // Forward declaration of A struct A; struct B { A* pA; };
Include guards do protège un en-tête des inclusions redondantes dans la même unité de traduction. Cependant, plusieurs définitions peuvent toujours apparaître en raison de leur présence dans différentes unités de traduction.
Pour résoudre ce problème, le mot-clé inline peut être utilisé pour autoriser plusieurs définitions dans différentes unités de traduction :
// header.h inline int f() { ... }
Alternativement, la définition de la fonction peut être déplacée vers un fichier source distinct pour éviter plusieurs définitions :
// source.cpp int f() { ... }
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!