Präprozessor und Header

Gast #475354
Lesenswert?
• ▲
▼
Hj

auf der Seite
http://de.wikibooks.org/wiki/C-Programmierung:_Eigene_Header
versuche ich die Notwendigkeit von Headerdateien zu verstehen.

Warum braucht man Headerdateien? Kann ich nicht den Inhalt der Header 
einfach in meine main.c schreiben? Dient das nur der Übersichtlichkeit?

In dem Link ist ja ein schönes Beispiel. Ich verstehe nicht warum in der 
Headerdatei nochmal das
#ifndef MYHEADER_H
auftritt. Denn der Fall des Nichtvorhandenseins der myheader.h kann ja 
garnicht eintreffen, da in der .c Datei die myheader.h auf jeden Fall 
aufgerufen wird.

Das einzige was ich mir vorstellen könnte ist dieser Ablauf:
1. Programmstart: myheader.c Datei aufrufen
2. Erste Anweisung: myheader.h öffnen
3. #ifndef MYHEADER_H ausführen -> im "Rechner-Gehirn" ist das Wort 
"MYHEADER_H" noch nicht bekannt, also die IF Bedingung auswerten (PI 
usw. definieren)
4. bei Ende der myheader.h weitermachen in myheader.c
5. Falls irgendwo (in irgendeiner .c Datei) nochmal "include myheader.h" 
auftritt, würde die IF Anweisung in der myheader.h NICHT ausgewertet 
(Doppelinitialisierungen vermeiden) da sie im "Rechner-Gehirn" schon 
definiert wurde.



Ist es das?





Gast #475368
Lesenswert?
• ▲
▼
Wenn man nur eine .c datei hat, braucht man nicht umbedingt einen 
Header, das dient nur zur Übersichtlichkeit. Wenn man in einer C Datei 
mehrere funktionen definiert, und diese mehreren anderen C Dateien 
bekannt machen will, müssen die funktionsdeklarationen dann in den 
Header. Alle anderen C Dateien die diese benutzen wollen können dann die 
Header Datei einbinden.

Das #ifndef brauchts wie du schon denkst zum vermeiden von doppelter 
Einbindung. Das muss nciht umbedingt so sein, dass die in einer .c Datei 
doppelt eingebunden werden. Es kann auch sein, dass eine C Datei (nennen 
wir sie main.c) zwei verschiedene Header einbindet, z.B. a.h und b.h, 
die beide verschiedene funktionen bereitstellen. b.h verwendet aber 
bereits funktionen, die in a.h bereitgestellt sind und bindet diese ein. 
Damit ist die Datei a.h in main.c doppelt inkludiert, und das führt zu 
Fehlermeldungen. Damit das nicht passiert macht man einfach diese 
#ifndef Anweisungen um alle Header.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.