Hallo zusammen
Lese gerade dieses Thema:
https://www.proggen.org/doku.php?id=c:pre:headerfile
Folgenden Text verstehe ich nicht:
Es kann nämlich vorkommen, dass eine Header eine andere Header einbindet und so wäre es möglich, dass eine Header zweimal in einer C-Datei vorkäme. Durch das Standardkonstrukt wird überprüft, ob der gleiche Inhalt zuvor schon eingesetzt wurde, um Duplikate zu vermeiden. Ansonsten gäbe es einen Compilerfehler.
Kann mir jemand das ausführlicher Erklären?
Liebe Grüße
Xeon
Headerdateien
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Headerdateien
Erstmal erkläre ich, dass der Text einer grammatikalischen Überarbeitung bedarf... laut Protokoll habe ich den von einem anderen Autor übernommen und da offenbar nur überflogen.
Nehmen wir an Du schreibst sowas:
dann würden die Strukturen und was alles in der Datei deklariert würde, doppelt deklariert: der Compiler meckert.
Ist also Pfui-Bah.
Meistens ist das nicht so offensichtlich. Nehmen wir nun an, dass "meine-headerdatei.h" stdio.h inkludiert, aber der Code, der "meine-headerdatei.h" inkludiert, tut das auch. Wieder würden die Strukturen in stdio.h doppelt inkludiert und der Compiler meckert.
Aus diesem Grund setzt man vor die Header sowas:
Wenn __HEADER_H__ nicht deklariert ist, dann deklariere es und lies dir die ganzen Strukturen hier durch. Wenn es schon definiert ist... mache nix.
__HEADER_H__ muss individuell sein. Also __MEINE_HEADERDATEI_H__ für Deine, bei mir ist es beispielsweise DE_XSD_CORE_TYPE_STRING für meinen String-Header. Wie das Define heißt, ist egal. Es darf nur nicht in zwei Header-Dateien auftauchen, sonst wird's besonders lustig, weil Dinge ignoriert werden, obwohl man die passende Datei eingebunden hat.
Ich geh den Text nachher mal durch.
Nehmen wir an Du schreibst sowas:
Code: Alles auswählen
#include "meine-headerdatei.h"
#include "meine-headerdatei.h"
Ist also Pfui-Bah.
Meistens ist das nicht so offensichtlich. Nehmen wir nun an, dass "meine-headerdatei.h" stdio.h inkludiert, aber der Code, der "meine-headerdatei.h" inkludiert, tut das auch. Wieder würden die Strukturen in stdio.h doppelt inkludiert und der Compiler meckert.
Aus diesem Grund setzt man vor die Header sowas:
Code: Alles auswählen
#ifndef __HEADER_H__
#define __HEADER_H__
/*Inhalt*/
#endif
__HEADER_H__ muss individuell sein. Also __MEINE_HEADERDATEI_H__ für Deine, bei mir ist es beispielsweise DE_XSD_CORE_TYPE_STRING für meinen String-Header. Wie das Define heißt, ist egal. Es darf nur nicht in zwei Header-Dateien auftauchen, sonst wird's besonders lustig, weil Dinge ignoriert werden, obwohl man die passende Datei eingebunden hat.

Ich geh den Text nachher mal durch.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.