Quelle est la meilleure pratique pour C ce que vous avez mis dans un fichier d'en-tête C? p>
est-il utile de mettre toutes les inclinations utilisées pour un programme sur plusieurs fichiers source dans un fichier d'en-tête? p>
Qu'en est-il de l'inclure qui sont utilisés dans pratiquement tous les fichiers (c'est-à-dire stdio.h)? p>
7 Réponses :
Un fichier d'en-tête est en réalité ce que vous incluez de votre programme C. Il contiendra des structures de données telles que les structures, les macros, les définitions de fonctions, etc. Parfois, un seul fichier d'en-tête peut être correct, achetez si votre programme augmente dans des composants logiques, vous aurez peut-être besoin de plus. P>
Je m'abonne personnellement à un "Mettez-le là où vous l'utilisez" Philosophie. Cela rend beaucoup plus clair que les fichiers utilisent quoi, où les dépendances sont, etc. p>
Imaginez que vous avez un en-tête Si sur l'autre main, vous n'incluez que myheader.h code>. Si vous modifiez cela, cela nécessite de changer de code qui en dépend, il est facile de trouver ce code dépendant si chaque fichier qui l'utilise a un
#include "myheader.h" code> - vous pouvez simplement faire une recherche globale de la déclaration include. p>
myheader.h code> dans un autre casher
myhugeheader.h code>, puis inclure que em> dans vos fichiers Vous ne pouvez pas faire la même chose, car tout ce qui est dans les fichiers qui utilisent
myheader.h code> est
#include "myhugeheader.h" code>, identique à tous les autres fichiers. p>
Non. Il ajoute simplement Cruft and Overhead. P>
L'une des plus grandes douleurs que vous ferez face à un mainteneur est de savoir ce que les en-têtes ne doivent pas em> doivent être inclus et se débarrasser d'eux. Vous arrivez à une liste de plus de 20 en-têtes, vous commencez contempler des objets laids comme brute forçage à travers il (en retirant une à la fois et à voir si quelque chose se casse). P>
Soyez gentil avec les personnes qui doivent maintenir vos affaires à l'avenir. Utilisez les en-têtes dont vous avez besoin par module, plus non moins :) p>
... Et bien sûr, cette bruteforçage est encore compliquée par le fait que vous devez tester "si quelque chose se casse" sur chaque système d'exploitation pris en charge, potentiellement sous plusieurs configurations de construction de construction différentes.
Préférence personnelle vraiment ... Peu importe la manière dont il est formaté tant que vous êtes cohérent (ce qui facilite la lecture). Vous pouvez tout mettre dans un fichier d'en-tête 1 ou vous pouvez simplement le mettre dans chaque fichier qui en a besoin. Cela dépend également de la manière dont les autres entreprises sont chargées tout ce qui vient après que le principal n'a pas besoin de son inclut, ce qui puisse donc utiliser le même fichier d'en-tête pour que tous vos autres fichiers C puissent ou non (dépend du compilateur) incluent la même chose. fois. p>
Edit: Je dois aussi être d'accord avec Mac aussi, mettez-le là où vous l'utilisez est une très bonne chose à faire aussi bien p>
Certaines choses ne sont pas déjà signalées: p>
Dépendances inutiles Ajouter à la compilation. Lorsque vous modifiez un en-tête, vous devrez recompiler toutes les unités de compilation qui l'incluent directement ou indirectement. Si l'inclusion n'est pas nécessaire, la recompilation n'est pas non plus. Plus votre programme est grand, le plus grand sera le problème, surtout si vous avez cassé vos programmes en composants dont votre recompilation doit être déclenchée manuellement. P> Li>
Les en-têtes de pré-compilateur peuvent être plus efficaces lorsque vous ajoutez des dépendances inutiles. P> LI> ul>
Je ne ferais pas volontairement tout mon inclus dans un seul fichier d'en-tête, simplement parce que si vous modifiez l'un de ces fichiers d'en-tête inclus, vous devrez recompiler tout ce qui a inclus votre fichier "MASTER". Cela peut entraîner des délais de compilation inutilement longs pour un changement de ligne unique. P>
Cela dit, je ne voudrais pas trop de temps pour m'assurer que je ne suis pas trop libéral avec des déclarations. Certains ingénieurs passeront beaucoup de temps à essayer de réduire l'inclus pour économiser sur le temps de compilation, et je pense que leur temps est mieux servi à résoudre les problèmes ou à travailler sur de nouvelles fonctionnalités. P>
mettre tous les en-têtes possibles dans un en-tête d'application est aussi faux que mal peut être. p>
C'est la paresse qui vient à un prix avantageux. Cela fait des constructions fragiles. Il est difficile de comprendre où sont véritables dépendances sont et donc difficiles à refacturer ou à réutiliser le code. P>
Il est difficile de tester. p>
Mais le plus gros problème est que cela représente la paresse intellectuelle et encourage plus de la même manière. P>
Tout comme tous les problèmes de programmation, faire ce qui est nécessaire, pas plus, pas moins. Pensez à la maintenance. Pensez à la gestion de la construction. p>
Pensez simplement. P>