Seite 1 von 1

Headerdateien

Verfasst: Mi Feb 03, 2021 2:48 pm
von Xeon
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

Re: Headerdateien

Verfasst: Mi Feb 03, 2021 3:13 pm
von Xin
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:

Code: Alles auswählen

#include "meine-headerdatei.h"
#include "meine-headerdatei.h"
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:

Code: Alles auswählen

#ifndef __HEADER_H__
#define __HEADER_H__
/*Inhalt*/
#endif
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. :-D

Ich geh den Text nachher mal durch.