Ich weiß, bevor Sie Ihre snarky Kommentare herauspeitschen - das ist eine nooby Frage. Ich verwende zum ersten Mal eine C-basierte Sprache.
Ich bin ein Student, der Ziel C für einen Informatikkurs über mobile Entwicklung lernt. Ich weiß, dass in einem akademischen Umfeld viele reale Überlegungen nicht erforderlich sind, da Sie kleinere Projekte erstellen, in kleineren Teams arbeiten usw.
Unser Professor fordert jedoch - und XCode unterstützt - .h-Headerdateien für jede .m-Implementierungsdatei. Für mich scheint es eine Art beschäftigte Arbeit zu sein. Ich muss sicherstellen, dass ich jede Methodensignatur und Instanzvariable in die andere Datei kopiere. Wenn ich eine Datei ändere, muss ich sicherstellen, dass sie mit der anderen Datei übereinstimmt. Es scheint nur ein Haufen kleiner Ärger zu sein.
Aber ich weiß , es muss sein , einige der realen Welt Verwendung für Header - Dateien. Eine gute Antwort würde beide ansprechen:
- Wofür ist eine Header-Datei nützlich, für die eine Implementierungsdatei nicht geeignet ist? Was ist seine Aufgabe?
- Warum müssen wir als Programmierer unsere Header-Dateien manuell schreiben? Es scheint, als könnten sie leicht automatisch generiert werden.
Danke im Voraus!
quelle
Antworten:
Zusamenfassend;
Die Header-Datei definiert die API für ein Modul. Es handelt sich um eine Vertragsliste, welche Methoden ein Dritter aufrufen kann. Das Modul kann als Black Box für Dritte betrachtet werden.
Die Implementierung implementiert das Modul. Es ist das Innere der Black Box. Als Entwickler eines Moduls müssen Sie dies schreiben, aber als Benutzer eines Moduls eines Drittanbieters sollten Sie nichts über die Implementierung wissen müssen. Der Header sollte alle Informationen enthalten, die Sie benötigen.
Einige Teile einer Header-Datei könnten automatisch generiert werden - die Methodendeklarationen. Dies würde erfordern, dass Sie die Implementierung mit Anmerkungen versehen, da die Implementierung wahrscheinlich private Methoden enthält, die nicht Teil der API sind und nicht in den Header gehören.
Header-Dateien enthalten manchmal andere Informationen. Typdefinitionen, Konstantendefinitionen usw. Diese gehören in die Header-Datei und nicht in die Implementierung.
quelle
Der Hauptgrund für einen Header besteht darin, dass
#include
er in einer anderen Datei verwendet werden kann, sodass Sie die Funktionen in einer Datei aus dieser anderen Datei verwenden können. Der Header enthält (nur) genug, um verwenden , um die Funktionen, die Funktionen nicht selbst, so (hoffentlich) Kompilieren es wesentlich schneller ist.Die beiden getrennt voneinander zu pflegen, führt dazu, dass niemand jemals einen Editor geschrieben hat, der den Prozess sehr gut automatisiert. Es gibt nicht wirklich viele Gründe, warum sie dies nicht konnten, und einige haben es sogar versucht - aber die Redakteure, die dies getan haben, haben sich auf dem Markt nie sehr gut geschlagen, und die Mainstream-Redakteure haben es nicht übernommen.
quelle
Durch das Einfügen eines Headers kann Ihr Code Funktionen oder Methoden aufrufen, die an anderer Stelle geschrieben wurden und möglicherweise Teil Ihres Softwareprojekts / Builds sind oder nicht, die jedoch beim Erstellen der Software vom Linker gefunden werden können.
Wenn Sie beispielsweise eine Funktion in der Standard-C-Bibliothek aufrufen, möchten Sie nicht alle Innereien dieser Funktion in Ihr Projekt einfügen müssen - Sie erwarten einfach, dass Ihr Programm sie aufrufen kann.
Ihrem Compiler muss jedoch mitgeteilt werden, dass die Funktion irgendwo vorhanden ist, auch wenn er den Code nicht sehen kann und der Header dies tut. Wenn der Compiler fertig ist, wird der Linker aufgerufen und versucht, die Teile Ihres Codes zu verknüpfen, die noch hängen bleiben, z. B. Bibliotheksaufrufe.
quelle
Header-Dateien werden hauptsächlich verwendet, um die Signaturen (dh Funktionsname, Rückgabewert und Argumente) Ihrer Funktionen in anderen Dateien zu deklarieren und einzuschließen. Der Compiler muss diese Signaturen kennen, wenn Sie Ihre Dateien kompilieren und miteinander verknüpfen.
Lesen Sie diesen Artikel für weitere Informationen.
quelle