Nach meinem (eingeschränkten - ich bin normalerweise kein C-Entwickler) Verständnis ist dies in C verwurzelt. Denken Sie daran, dass C nicht weiß, was Klassen oder Namespaces sind, es ist nur ein langes Programm. Außerdem müssen Funktionen deklariert werden, bevor Sie sie verwenden.
Folgendes sollte beispielsweise einen Compilerfehler ergeben:
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
Der Fehler sollte sein, dass "SomeOtherFunction nicht deklariert ist", weil Sie es vor seiner Deklaration aufrufen. Eine Möglichkeit, dies zu beheben, besteht darin, SomeOtherFunction über SomeFunction zu verschieben. Ein anderer Ansatz besteht darin, zuerst die Funktionssignatur zu deklarieren:
void SomeOtherFunction();
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
Dies lässt den Compiler wissen: Schauen Sie irgendwo im Code nach, es gibt eine Funktion namens SomeOtherFunction, die void zurückgibt und keine Parameter akzeptiert. Wenn Sie also Code finden, der versucht, SomeOtherFunction aufzurufen, geraten Sie nicht in Panik und suchen Sie stattdessen danach.
Stellen Sie sich vor, Sie haben SomeFunction und SomeOtherFunction in zwei verschiedenen .c-Dateien. Sie müssen dann "SomeOther.c" in Some.c einschließen. Fügen Sie nun SomeOther.c einige "private" Funktionen hinzu. Da C keine privaten Funktionen kennt, wäre diese Funktion auch in Some.c verfügbar.
Hier kommen .h-Dateien ins Spiel: Sie geben alle Funktionen (und Variablen) an, die Sie aus einer .c-Datei exportieren möchten, auf die in anderen .c-Dateien zugegriffen werden kann. Auf diese Weise erhalten Sie so etwas wie einen öffentlichen / privaten Bereich. Sie können diese .h-Datei auch an andere Personen weitergeben, ohne Ihren Quellcode freigeben zu müssen - .h-Dateien funktionieren auch mit kompilierten .lib-Dateien.
Der Hauptgrund liegt also in der Bequemlichkeit, im Schutz des Quellcodes und in der leichten Entkopplung zwischen den Teilen Ihrer Anwendung.
Das war allerdings C. C ++ hat Klassen und private / öffentliche Modifikatoren eingeführt. Während Sie also immer noch fragen können, ob sie benötigt werden, erfordert C ++ AFAIK vor der Verwendung immer noch eine Deklaration von Funktionen. Viele C ++ - Entwickler sind oder waren auch C-Entwickler und haben ihre Konzepte und Gewohnheiten in C ++ übernommen - warum ändern, was nicht kaputt ist?