2011-01-03 15 views
5

Ich habe diesen einfachen Code:einen Schwimmer Typ von Funktion in c Rückkehr

int main() 
{ 
    float x = foo(); 
    printf("returned value: %f", x); 
    return 0; 
} 

float foo() 
{ 
    return 5; 
} 

, wenn ich den Code ausführen, der Ausgang ist: "Rückgabewert: -858.993.472,000000"

kann jemand bitte Erklären Sie mir, warum ist der zurückgegebene Wert nicht 5.000000?

Antwort

18

An dem Punkt, an dem Sie die Funktion aufrufen, befindet sich kein Prototyp im Bereich. Dies bedeutet, dass angenommen wird, dass die Funktion int zurückgibt. Fügen Sie einen Prototyp vor dem Punkt hinzu, an dem Sie die Funktion zuerst aufrufen.

float f(void); 
+0

Danke! Ich verbrachte eine Stunde damit ... – MOP

+1

... oder definiere 'foo()' * vor * 'main()'. @MOP: Sie sollten die Warnstufeneinstellungen für Ihren Compiler anpassen; Die meisten Compiler haben davor gewarnt, Warnungen nicht zu unterdrücken oder zu ignorieren. Ich schlage vor, dass Sie auch Warnungen als Fehler setzen (GCC: -Wall -Werror, VC++ \ W4 \ Wx). – Clifford

+0

@Clifford: ... und ich möchte diese Funktionsdefinition auch zu einem Prototyp machen. –