À mon (limité - je ne suis pas un développeur C normalement) de la compréhension, c'est enracinée dans C. Rappelez-vous que C ne sait pas ce que les classes ou les espaces de noms sont, c'est juste un programme long. En outre, les fonctions doivent être déclarées avant leur utilisation.
Par exemple, le suivant doit donner une erreur de compilateur:
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
L'erreur doit être "de SomeOtherFunction n'est pas déclaré" parce que vous l'appelez avant de déclaration. Un moyen de fixation est de passer SomeOtherFunction ci-dessus SomeFunction. Une autre approche consiste à déclarer les fonctions de la signature de la première:
void SomeOtherFunction();
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
Cela permet au compilateur de savoir: Chercher quelque part dans le code, il y a une fonction appelée SomeOtherFunction void et ne prend aucun paramètre. Donc, si vous rencontrons code qui tente de l'appeler SomeOtherFunction, ne paniquez pas et au lieu d'aller le chercher.
Maintenant, imaginez que vous avez SomeFunction et SomeOtherFunction dans deux différents .c fichiers. Ensuite, vous devez #include "SomeOther.c" dans Certains.c. Maintenant, ajouter un peu de "privé" fonctions de SomeOther.c. Comme C ne sait pas privé des fonctions, que la fonction est disponible dans Certains.c ainsi.
C'est où .h Fichiers: Ils spécifier toutes les fonctions (et variables) que vous souhaitez à "l'Exportation" de une .c fichier qui peut être consulté dans d'autres .c fichiers. De cette façon, vous gagnez quelque chose comme un Public/Privé de la portée. Aussi, vous pouvez donner ce .h fichier à d'autres personnes sans avoir à partager votre code source .h les fichiers de travail contre compilé .fichiers lib.
Donc, la raison principale est vraiment pour des raisons de commodité, le code source de protection et d'avoir un peu de découplage entre les parties de votre application.
Que C était bien. C++ a introduit les Classes et privé/public modificateurs, donc pendant que vous pourrait encore se demander si elles sont nécessaires, C++, autant que je sache encore besoin d'une déclaration de fonctions avant de les utiliser. Aussi, de nombreux Développeurs C++ sont ou ont été C devleopers ainsi et ont pris possession de leurs concepts et les habitudes de C++ - pourquoi changer ce qui n'est pas cassé?