www.mikrocontroller.net

Forum: Compiler & IDEs Präprozessor und Header


Autor: Knut (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?






Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal folgendes an. Vielleicht verstehst du dann das
'Warum' besser.

http://www.mikrocontroller.net/articles/Funktionen...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.