Paul Szymanski schrieb:
> Ja das mit den prototypen ist mir bekannt aber ich muss ja trotzdem i-wo
> die komplette funktion angeben... und jedes mal die funktion erst in
> i-eine c-datei packen ist ja aufwändiger als einfach den header zu
> includen
Du hast immer noch nicht verinnerlicht, dass ein komplettes Programm aus
mehrerer *.c Dateien besteht, die unabhängig voneinander compiliert und
die Ergebnisse des Compiliervorgangs dann zum kompletten Programm
zusammengelinkt werden.
Jede *.c wird für sich alleine compiliert. Besteht ein Projekt aus 2000
*.c Dateien, und gibt es eine Änderung in einer davon, dann wird auch
nur diese eine *.c neu compiliert und dann erneut das komplette Programm
daraus gelinkt.
Das ist das Um- und Auf, wie die Dinge in C funktionieren und warum
gewissen Dinge in C so sind, wie sie sind.
C an sich kennt abgesehen davon noch keinen Projektgedanken, wie er zb
in C# vorhanden ist. In C ist ein Projekt einfach nur eine Sammlung von
*.c Dateien, die noch nicht einmal alle auf dem gleichen Verzeichnis
sein müssen. C# lebt davon, dass es eine IDE gibt. Zu der Zeit, in der C
entstanden ist, wagte noch nicht einmal irgendjemand von einer IDE zu
träumen. Daher postuliert C auch nicht, dass es da etwas gibt, was ein
Projekt zusammenhält.
Besteht ein Projekt aus den Dateien main.c und helpers.c, dann wird
daraus ein ausführbares Progamm, indem auf einer Kommandline (also nix
Klikibunti)
cc helpers.c
cc main.c
die beiden Source Code Dateien einzeln compiliert werden. Aus helpers.c
wird ein helpers.o compiliert, welches schon Maschinencode enthält, aber
nur fpr die Teile die in helpers.c enthalten sind. Gleiches sinngemäss
für main.c
Die beiden Compilierergebnisse helpers.o und main.o werden dann mittels
link main.o helpers.o /output=program.exe
zum kompletten Programm program.exe zusammengebunden (+ natürlich noch
die notwendige Runtime Library, welche die vorgefertigten Funktionen
beisteuert).
So wird ein Programm in C gebaut. Und weil das so ist, weil helpers.c
extra compiliert wird, weil main.c extra compiliert wird, musste man
sich etwas einfallen lassen, dass zb die Sache mit Definitionen und
Deklarationen regelt.