PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Allgemeine Frage zu Headerfiles



f0rtex
16-02-2000, 06:38
Hallo Leute

Ich bin gerade das Buch "C für PC" am durcharbeiten. Jetzt habe ich eine kleine Frage zu den Headerfiles.

Wieso steht am Anfang jedes Headerfiles
(hier am Bsp. stdio.h gezeigt)
#ifndef __STDIO_H
#define __STDIO_H
....
#endif

Bei den Bsp. im Buch wird nichts von #ifndef... erwähnt.

tnx&&Greets
f0rtex

docdooley
16-02-2000, 08:50
Hi,

da ein Headerfile meistens in mehreren Dateien benoetigt wird und um zu vermeiden das es mehrmals eingelesen wird, steht diese Praeprozessoranweisung am beginn jedes vernueftigen Headerfiles
Kurzerklaerung der Zeilen:
#ifndef __STDIO_H
wenn dieses define noch nich definiert ist
#define __STDIO_H
definiere es und somit ist es definiert, die nachfolgenden Deklarationen, Definitionen werden gemacht, dies wird gemacht um Doppeldefinitionen und Deklarationen zu vermeiden

docdooley

f0rtex
16-02-2000, 08:58
Danke!

Noch ne Frage:
Wieso wird
#ifndef __STDIO_H
und nicht
#ifndef STDIO.H
geschrieben?

greets

docdooley
16-02-2000, 09:21
Hi,

also eigentlich kann man schreiben was man will, nur hat es sich eingebuergert, interne Defines mit Doppelunterstrich zu beginnen und der Punkt dahinter ist auch nicht so ueblich ... der Doppelunterstrich dient also dafuer um von eigenen defines unterscheiden zu koennen und damit der Programmierer auch gleich weiss, das es sich um ein internes define handelt und das _H deutet an, dass es sich um ein Headerfile handelt

open your minds open your source

docdooley

[Diese Nachricht wurde von docdooley am 16. Februar 2000 editiert.]

f0rtex
16-02-2000, 09:30
Danke aber ich hab noch ne kleine Frage (sorry musst es sagen wenn ich zu aufdringlich werde):
Werden die __ vom compiler ignoriert?
Unterscheidet der compiler nicht Gross- und Kleinschreibung?

Greets
f0rtex

P.S.: sorry fuer mein staendiges Fragen!

docdooley
16-02-2000, 12:56
Hi,

erstmal muss ich mich von her korriegieren, ganz alles darfst Du bei einem define auch nicht schreiben, also . sollte nicht vorkommen, doch der Compiler unterscheidet natuerlich, aber fuer den Entwickler ist es so einfacher, denn wenn Du einen Quellcode einmal durchliest und dann stoesst Du auf ein Define mit __ dann weisst gleich, dass ist ein internes Define, dass sollte ich dann auch nicht unbedingt beruehren
Kein Problem kannst ruhig weiter fragen, antworte meistens gerne :-))

docdooley

f0rtex
16-02-2000, 13:00
Danke vielmals!
Hast mir sehr geholfen! Jetzt werden einige Sources verständlicher!

Greets
f0rtex

SBär
26-02-2000, 20:46
By the way...

alles was mit der Raute "#" beginnt ist eine Praeprozessoranweisung hat also streng genommen mit dem Compiler nichts zu tun. Der Praeprozessor ist "nur" ein etwas fortschrittlicheres "Verbinde-Suche-und-Ersetze" - Textprogramm.
Bei einer Include-Anweisung macht der Praeprozessor nichts anderes, als den Text aus der zu inkludierenden Datei an der Stelle des Befehls einzusetzen. Erst nach dem kompletten Praeprozessorlauf wird kompiliert.

Gruss,
Sebastian

Hagen von Tronje
26-02-2000, 22:54
Hi,

dabei sollten wir aber nicht die bedingte
Uebersetzung (conditional compilation) der
Praeprozessors vergessen.

Ganz so dumm ist er nun auch nicht http://www.linuxforen.de/ubb/wink.gif

Hagen