|
|
||
|
|
||
| .. Headerdatei.h | ||
|
|
||
| Am Anfang der meisten C-Programme und auch bei anderen Sprachen sind Zeilen wie z.B. #include <stdio.h> zu finden. Nachdem geklärt wurde, dass die Präprozessordirektive #include, Dateien an der von ihr besetzten Stelle einfügt, soll nun geklärt werden, was es mit den eingefügten Dateien auf sich hat. | ||
|
Diese Dateien die oft mit Include- oder
Headerdatei bezeichnet werden, verdanken ihren Namen im ersten
Fall der Direktive, die sie einbindet bzw. im 2. Fall ihrem
häufigsten Inhalt. Dieser besteht häufg aus
Deklarationen von Funktionen, also Funktionnsköpfen, den
Headern die auch in dem Suffix der Datei .h ihren Niederschlag
gefunden haben.
Wie auch immer die Namensgebung dieser Dateien lautet, es handelt sich grundsätzlich um ASCII-Textdateien, die eine beliebige Endung besitzen dürfen und alle Elemente eines Quellcodes enthalten dürfen. Die einzigen zwei Bedingungen, die an diese Dateien gestellt werden, sind .. |
||
|
1. Sie dürfen nur ASCII codierten Text
enthalten
Damit
kann man sie mit jedem Texteditor, Officeprogramm usw. erstellen
und lesen.
2. Ihre Inhalte müssen von dem Übersetzerprogramm verstanden werden können. Diese Bedingung versteht sich fast von selber, weil welchen Sinn sollte es haben, einem Übersetzerprogramm (Compiler/Assembler) eine Datei anzubieten, die nur Fehlermeldungen erzeugt. |
||
|
Die
Dateiendungen dieser Dateien lauten bei Verwendung der
Programmiersprache C zwar meistens auf .h, aber wie bereits
gesagt können auch beliebige andere Endungen verwendet
werden. Beispiele wären .txt, .doc, .c, .cpp, .inc, .pas,
.asm .. und was sonst noch alles möglich ist.
Die Inhalte Grundsätzlich kann in den Include-Dateien alles das drinstehen, was auch in den Quelltextdateien steht. Allerdings beschränken sich die Programmierer normalerweise darauf , übergeordnete Dinge, dort unterzubringen. Bei den Include- oder den Headerdateien der statischen Bibliothek beispielsweise, befinden sich in diesen die Header- oder Kopfzeilen von Funktionen, also deren Deklarationen. Dieser Umstand führte auch zu deren Endung .h, was von Header abgeleitet ist. Überdies sind dort die Definitionen einiger Konstante untergebracht wie beispielsweise der Wert von PI, der dort per #define mit M_PI erklärt wurde. .. was sich nicht in den Headerdateien der statischen Bibliothek befindet In den Headerdateien, die zusammen mit der IDE geliefert wurden und dort in dem Verzeichnis \include\ abgelegt wurden, befinden sich nicht die Bibliotheksfunktionen selber. Diese Funktionen wurden in Maschinensprache übersetzt und als .obj-Datei in der statischen Bibliothek.lib abgelegt. Darum nennt man sie Funktionen der statischen Bibliothek und nicht Funktionen der Headerdateien. .. Beispiel Die Funktion sqrt() -Square Root (ziehe die Quadratwurzel) wurde von pfiffigen Programmierer geschrieben und die haben den Quelltext in Maschinensprache übersetzen lassen. Es gibt also eine Datei sqrt.obj sowie einen Funktionskopf, der .. double sqrt(double); heisst. Der Funktionskopf von sqrt(), also double sqrt (double); steht in der Datei math.h. Diese Headerdatei muss man mit #include<math.h> in ein eigenes Programm einbinden, wenn man sqrt() benutzen will. Das geschieht, damit der Compiler überprüfen kann ob die Funktion richtig verwendet wurde, und ihr nicht aus Versehen ein String übergeben wurde. Bindet man math.h nicht ein, so generiert der Compiler die Fehlermeldung, .. Function should have a Prototyp Der Objektcode, also das Maschinenprogramm von sqrt(), ist in der statischen Bibliotheksdatei math.lib zu finden. Mit diesem Code hat der Programmierer so gut wie nichts zu tun. Nachdem sqrt() in seinem Programm aufgerufen wird, holt sich der Linker ohne besondere Nachfrage den Maschinencode aus der Bibliothek und hängt ihn an das eigene Programm an. Da es in der statischen Bibliothek von C viele fertige Funktionen gibt, deren Header nicht alle in eine Headerdatei hineinpassen, gibt es also viele Headerdateien, wie math.h, stdio.h, conio.h usw. .. |
||
|
|
|
|
.de