Headerdateien

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Xeon
Beiträge: 169
Registriert: So Dez 17, 2017 4:10 pm

Headerdateien

Beitrag von Xeon » Mi Feb 03, 2021 2:48 pm

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Headerdateien

Beitrag von Xin » Mi Feb 03, 2021 3:13 pm

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.
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.

Antworten