PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C: aufbau von header Dateien und wie schreibe ich meine eigene header Datei?



BeS
12-02-2003, 21:10
hallo,
wenn man sich die header Dateien von C ansieht, z.B. stdio.h stehen da ja nur die Definitionen drin.
Zum Beispiel printf:
extern int printf (__const char *__restrict __format, ...) __THROW;

Aber wo ist dann die Funktion printf ausprogrammiert? Da muss es ja dann noch irgendwo eine andere Datei geben...

Und wie kann ich meine eigene header Datei schreiben?
Ich kann zwar eine foo.h schreiben in der ich eine Funktion definiere und diese dann in einer weiteren foo.c ausprogrammieren. Wenn ich dann die foo.h in mein Programm einbinde muss ich aber die foo.c und mein Hauptprogramm compilieren und es dann zusammenlinken. Das geht ja bei anderen headern wie stdio.h automatisch, wie kann ich auch solche header Dateien bauen?

Danke!

anda_skoa
12-02-2003, 21:41
Du musst die Implementation der Header, die wie du schon erkannt hast in C Dateien sind, zu einer Bibliothek zusammenlinken.

Diese Bibliothek kann dan vom Linker zu deinem Programm gelinkt werden.

Das passiert auch bei der Standardbibliothek, nur dass man die halt nicht extra angeben muss, weil es eben die Standardbibliothek ist :)

Ciao,
_

BeS
12-02-2003, 22:00
hallo,
also ich habe das so gemacht:
Ich habe meine header: foo.h und die ausprogrammierten Funktionen foo.c.
Dann schreibe ich mein Programm main.c in das ich mit #include "foo.h" die header Datei einbinde.
Danach compiliere ich main.c und foo.c:
gcc -c main.c
gcc -c foo.c
und linke die zusammen:
gcc foo.o main.o

Das ist dann so richtig, oder?

PS. Trotzdem würde mich mal interessieren, wo man z.B. die ausprogrammierte Funktion printf finden kann? In /usr/include liegen ja nur die *.h files herum.

Danke!

nickers
12-02-2003, 23:54
PS. Trotzdem würde mich mal interessieren, wo man z.B. die ausprogrammierte Funktion printf finden kann? In /usr/include liegen ja nur die *.h files herum.


In diesem speziellen Fall wahrscheinlich im CVS des gcc

http://gcc.gnu.org/cgi-bin/cvsweb.cgi/

anda_skoa
15-02-2003, 13:09
Eher im Source der glibc

Ciao,
_