On Mon, Apr 03, 2000 at 09:06:56PM +0200, Torsten Lange wrote: : Hallo Lug, : : mal wieder was ganz banales...Ich uebe gerade Wertuebergabe in C. : : Ueber eine Fkt., die int zurueckgibt, komme ich aber irgendwie nicht : hinaus: "float fkt()" bringt mir Warnungen beim Compilieren und gibt : fantastische Werte zurueck. Habe schon diverse Literatur durchgeguckt... : : > gcc -o aufgabe14 aufgabe14.c : aufgabe14.c:34: warning: type mismatch with previous implicit : declaration : aufgabe14.c:26: warning: previous implicit declaration of `calc' : aufgabe14.c:34: warning: `calc' was previously implicitly declared to : return `int'
Da brauchen wir den Rest garnicht ansehen. Du hast wahrscheinlich Deine Funktion definiert, nachdem sie verwendet wurde.
Wenn eine Funktion vor der ersten Benutzung nicht _deklariert_ (Prototyp) wurde, nimmt der Compiler an, es handelt sich um `int f()', wobei der Typ und die Anzahl der Parameter keine Rolle spielt.
Diese `automatische' Deklartion beisst sich natuerlich mit der spaeteren wirklichen _Definition_.
Loesung:
(A) Funktion _vor_ der Verwendung definieren. (Also main() als letzte Funktion in Deiner Datei.) Ist aber m.E. eher unueblich.
(B) Funktion erst deklarieren (Prototyp). Dann muessen aber auch Typ und Anzahl der Parameter stimmen.
#include ....
float calc(float, float);
int main(int argc, char **argv) { ... }
float calc(float a, float b) { float r; ... return r; }
PS: Eine sehr gute Investition ist:
Programmieren in C, Kernighan & Richie (also die, die's wissen muessen, und obendrein ist's auch sehr (!) gut aufgebaut. Es ist m.E. _das_ Standardwerk schlechthin.)
Heiko