Maison >développement back-end >C++ >Mettre des définitions C dans des fichiers d'en-tête est-il vraiment la norme universelle ?

Mettre des définitions C dans des fichiers d'en-tête est-il vraiment la norme universelle ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-23 20:53:15935parcourir

Is Putting C   Definitions in Header Files Truly the Universal Norm?

Le placement des définitions C dans les fichiers d'en-tête est-il la norme universelle ?

Le style de programmation de chacun dicte que les déclarations de classe sont stockées dans des fichiers d'inclusion, tandis que les définitions résider dans des fichiers .cpp distincts. Cette approche s'aligne sur le principe décrit dans la réponse largement appréciée de Loki dans l'article « Fichiers d'en-tête C, séparation de code ».

Cependant, un collègue insiste sur le fait que les déclarations C devraient généralement englober les définitions dans le même fichier d'en-tête. Il soutient qu'il s'agit d'une pratique moderne universellement adoptée.

Vérifier la prévalence de cette pratique

Pour vérifier la validité de cette affirmation, examinons les pratiques courantes observées dans l'industrie.

Réponse

Votre l'affirmation d'un collègue est incorrecte. La pratique répandue a toujours été, et reste, de conserver le code dans des fichiers .cpp (ou d'autres extensions désignées) et les déclarations dans les en-têtes.

Bien qu'il y ait des avantages occasionnels à placer du code dans les en-têtes, tels que l'intégration améliorée du compilateur , cela peut également entraîner des temps de compilation prolongés en raison du traitement répétitif du code lors de son inclusion. De plus, cela peut introduire des complexités avec les relations d'objet circulaires lorsque le code est contenu dans des en-têtes.

En résumé, la pratique dominante consistant à séparer le code et les déclarations correspond à vos préférences, contrairement à l'affirmation de votre collègue.

Exceptions et clarifications

Une exception notable concerne les modèles. Les bibliothèques modernes comme Boost utilisent massivement des modèles et adoptent fréquemment une approche « en-tête uniquement ». Cependant, il s'agit d'un scénario unique spécifiquement applicable aux modèles.

Inconvénients du code d'en-tête uniquement

Il est important de considérer les inconvénients de l'écriture de code d'en-tête uniquement :

  • Temps de compilation prolongés, comme en témoignent les discussions sur la réduction des temps de compilation avec Boost Asio.
  • Certains éléments, tels que les objets globaux, ne peuvent pas être implémentés dans des bibliothèques d'en-tête uniquement sans recourir à des singletons ou à d'autres solutions problématiques.
  • Les avantages de la compilation incrémentielle sont perdus, ce qui entraîne de longs temps de recompilation pour même des changements mineurs.

Conclusion

Le traditionnel la pratique consistant à séparer les déclarations et les définitions reste l'approche dominante en C . Bien qu'il existe des scénarios spécifiques dans lesquels le code d'en-tête uniquement peut être bénéfique, il est crucial de comprendre ses limites et de l'utiliser judicieusement. L'adoption universelle prétendue des définitions d'en-tête uniquement est infondée et il est conseillé de maintenir la pratique bien établie consistant à séparer le code et les déclarations.

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