kleine Frage in C
-
Hi,
ich muss für die Berufsschule ein Referat über C halten, aber mir fehlt noch eine Kleinigkeit. Kann mir bitte jemand erklären was in C ein Prototyp ist, wie er funktioniert und was der Unterschied zu einer normalen Funktion ist.
Ich habe schon einige Bücher zu dem Thema gelesen, aber es wird nie richtig angesprochen.Danke im voraus
Gruss Serpent
-
Ein Prototyp ist eine Funktionsdeklaration ohne Funktionskörper, wobei die Namen der formalen Parameter entfallen können, lediglich die Typen müssen erscheinen (es ist trotzdem gute Praxis, die Namen dazuzuschreiben). Prototypen werden immer dann gebraucht, wenn die Funktion an der Stelle, an der sie benutzt wird, noch nicht implementiert ist. Durch den Prototyp kennt der Compiler den Rückgabetyp und die Parameterliste, und kann damit schon den Maschinencode für den Funktionsaufruf generieren.
Wenn man eine Funktion aufruft, ohne dass sie bekannt ist, nimmt der Compiler an, dass sie int zurückgibt und eine variable Parameterliste hat: int foo(...). Darauf sollte man sich allerdings nicht verlassen, das ist nur noch aus Tradition erlaubt, weils bei K&R keine Prototypen gab (es gab Funktionsdeklarationen, die aber nicht die Parametertypen beinhaltet haben).
Beispiele für Prototypen:
void foo(void);
struct bar * foo(int, char *);
int printf(const char *fmt, ...);
-
Prototyp hiess früher das, was heute Deklaration heißt, einfach gesagt also die Funktionsköpfe, die Du in Headerdateien findest.
Dagegen umfaßt die Definition dazu den Funktionsrumpf, also die eigentliche Implementierung der Funktion, also die Dinge, die 'normal' in den C-Dateien sind.
Vielleicht noch ein wenig Haarspalterei:
Deklaration und Definition finden sich natürlich auch im Bereich von Strukturen und Unions, während man Prototyp wohl nur im Zusammenhang mit Funktionen findet.edit: Freitag der Shade, heute der Bashar. sowas
[ Dieser Beitrag wurde am 11.11.2002 um 12:39 Uhr von Bitsy editiert. ]
-
Hi Bitsy,
wollt mich bei Dir für die schnelle Hilfe bedanken, ihr zwei wart meine Rettung.
Gruss und Dank
Serpent22
-
Hey, Bashar war schneller und außerdem exakter.
Ich habe vorausgesetzt, dass Du Definition und Deklaration kennst.
-
Original erstellt von Bitsy:
Hey, Bashar war schneller und außerdem exakter.
Ich habe vorausgesetzt, dass Du Definition und Deklaration kennst.Hab mich bei Ihm auch schon bedankt, ihr wart beide ne Hilfe.
Also dann, Danke nochmal.cu
Serpent22