web-dev-qa-db-fra.com

Pourquoi inclure d'abord l'en-tête associé?

Sur la question C/C++ inclut l'ordre des fichiers/meilleures pratiques , la meilleure réponse recommande d'inclure d'abord l'en-tête associé.

Idem pour les guides de style Google et Mozilla .

Cependant, dans les deux cas, je n'ai pas trouvé de bonne raison pour laquelle vous feriez cela.

Les règles de codage Google et Mozilla me semblent les meilleures, car elles vous obligent à inclure les en-têtes les plus "standard" en premier.

De cette façon, je pense que vous êtes moins susceptible de gâcher les fichiers inclus (par exemple en définissant certaines macros utilisées dans les autres en-têtes, etc.), ce qui semble être la meilleure façon de procéder pour moi.

Mais suivant cette logique, pourquoi incluriez-vous d'abord l'en-tête associé? Puisqu'une erreur de syntaxe pourrait gâcher tous les en-têtes suivants?

Je pense que l'inclusion de l'en-tête correspondant en dernier serait préférable.

27
Arnaud

C'est pour s'assurer que vos clients ne vous détestent pas lorsqu'ils incluent votre en-tête de bibliothèque.

Si l'en-tête est fragile et sujet à se casser sur un mauvais ordre d'inclusion, il peut sembler fonctionner dans votre environnement lorsqu'il n'est pas le premier - puisque vous incluez les en-têtes vous besoin - mais ne compilez pas pour le client code. Parce qu'il n'est peut-être pas évident du tout quels autres en-têtes doivent être extraits pour que cela fonctionne.

L'inclusion de l'en-tête qui correspond au fichier d'implémentation actuel sert à vérifier que l'en-tête est autonome. L'auto-confinement va au-delà de la simple inclusion des en-têtes nécessaires. Cela implique également d'ajouter les déclarations avancées requises pour les types que vous utilisez dans votre API. Naturellement, votre en-tête sera compilé si vous incluez l'en-tête du type avant, mais vous ne souhaiterez peut-être pas le récupérer car vous ne dépendez que du nom du type dans votre API.

Certains guides de style interdisent les déclarations prospectives, de sorte que celles-ci peuvent ne pas faire partie de la justification qu'elles posent.

40
StoryTeller

L'inclusion de l'en-tête lié au fichier cpp garantit d'abord que l'en-tête est autonome et ne nécessite pas d'autres inclusions pour être compilé

15
Alan Birtles