Disons que nous avons deux fichiers d'en-tête: Notre cible de construction Maintenant, dans Quelle version de n'est-il probablement que si l'on fonctionne avec un logiciel tiers, que cette situation pourrait donc se produire? P> /directory1/a.hpp code> et
Directory2 / A.HPP code>. Le contenu de ces deux en-têtes est
A.CPP CODE> a besoin
Directory1 code> et
Directory2 code> Comme include les chemins, car il existe d'autres fichiers d'en-tête nécessaires dans les deux répertoires. < / p>
A.CPP CODE> Il y a un
#include "A.HPP" code> instruction. P>
A.HPP code> Le pré-processeur choisira-t-il? p>
4 Réponses :
Cela dépendra de vos options de compilation, et plus particulièrement de votre chemin incluent. P>
Si répertoire1 est dans le chemin Inclure, ce sera le /directory1/a.hpp code>, sinon si le répertoire2 est dans le chemin Inclure, ce sera le
/ a répertoire2 / a .HPP code>.
Si Directory1 et Directory2 sont tous les deux dans le chemin Inclure, le compilateur vous demandera de spécifier le répertoire, comme
#include "Directory1 / A.HPP" CODE>. P>.
Cela ne vous «demandera pas de préciser» quoi que ce soit dans le dernier cas. C'est "d'abord trouvé" (qui signifie généralement la première liste énumérés dans la liste des annuaires inclus).
La directive Inclure avec Double citations Colle le fichier référencé sous sa forme littérale. Le chemin de fichier est considéré comme étant relatif à l'emplacement du fichier source. P>
Donc, si vous aviez Généralement, vous devez avoir des noms spécifiques et descriptifs pour empêcher la contention ici. L'utilisation de répertoires de la même manière que vous utiliseriez un espace de noms C ++ est une pratique suffisante. Regardez la structure des bibliothèques comme LibxML ++ et GTKMM. P> #include "Directory1 / A.HPP" Code>, il inclura l'évidence une. Si vous
#include
#include "A.HPP" code>, cela dépend d'une première apparition dans votre chemin de recherche. P>
Que se passe-t-il dans ce cas dépend du compilateur en question (consultez les documents du compilateur que vous utilisez).
Des situations comme celles-ci sont la raison pour laquelle utiliser des noms d'en-tête "non qualifiés" est généralement une mauvaise idée. Structez toujours vos annuaires incluent une partie de la voie d'un élément nécessaire du nom. E.g. P> au lieu de p>
Les choix du compilateur incluent des fichiers dans l'ordre que les répertoires Include sont répertoriés en tant qu'arguments sur Dans un cas où il y a deux fichiers avec le même nom, vous devez spécifier lequel vous voulez dans le fichier source. p> -I code>. Le premier fichier trouvé est utilisé. p>
Je pense que le compilateur remplace simplement la ligne
#include code> avec le contenu du fichier, de sorte que le nom n'a pas d'importance.
Si vous utilisez
#pragma une fois code> ou une protection include, cela n'aura pas d'importance, car le contenu n'est inséré qu'une seule fois.
Désolé, j'ai oublié de mentionner ce qui se passe si les deux fichiers d'en-tête sont différents, voir Modifier.
Espaces de noms, espaces de noms, espaces de noms, partout b>. Les noms de fichier sont des noms aussi, ils ont donc besoin d'espaces de noms. Tirez sur les deux auteurs de la bibliothèque.