- 06/10/2020
- 4 Minuten zum Lesen
-
- c
- n
- M
- g
- S
A return
Anweisung beendet die Ausführung einer Funktion und gibt die Kontrolle an die aufrufende Funktion. Die Ausführung wird in der aufrufenden Funktion an dem Punkt unmittelbar nach dem Aufruf fortgesetzt. Eine return
Anweisung kann einen Wert an die aufrufende Funktion zurückgeben. Weitere Informationen finden Sie unter Rückgabetyp.
Syntax
Jump-Anweisung:
return
expressionopt;
Der Wert von expression, falls vorhanden, wird an den aufruf funktion. Wenn expression weggelassen wird, ist der Rückgabewert der Funktion undefined. Der Ausdruck, falls vorhanden, wird ausgewertet und dann in den von der Funktion zurückgegebenen Typ konvertiert. Wenn eine return
-Anweisung einen Ausdruck in Funktionen enthält, die einen void
-Rückgabetyp haben, generiert der Compiler eine Warnung, und der Ausdruck wird nicht ausgewertet.
Wenn keine return
Anweisung in einer Funktionsdefinition erscheint, kehrt control automatisch zur aufrufenden Funktion zurück, nachdem die letzte Anweisung der aufgerufenen Funktion ausgeführt wurde. In diesem Fall ist der Rückgabewert der aufgerufenen Funktion nicht definiert. Wenn die Funktion einen anderen Rückgabetyp als void
, handelt es sich um einen schwerwiegenden Fehler, und der Compiler gibt eine Warndiagnosemeldung aus. Wenn die Funktion einen void
Rückgabetyp hat, ist dieses Verhalten in Ordnung, kann jedoch als schlechter Stil angesehen werden. Verwenden Sie eine einfache return
-Anweisung, um Ihre Absicht klarzustellen.
Geben Sie als gute technische Praxis immer einen Rückgabetyp für Ihre Funktionen an. Wenn kein Rückgabewert erforderlich ist, deklarieren Sie die Funktion als void
Rückgabetyp. Wenn kein Rückgabetyp angegeben ist, nimmt der C-Compiler einen Standardrückgabetyp von int
an.
Viele Programmierer verwenden Klammern, um das Ausdruckargument der return
Anweisung einzuschließen. C benötigt jedoch keine Klammern.
Der Compiler gibt möglicherweise eine Warndiagnosemeldung über nicht erreichbaren Code aus, wenn er nach der return
Anweisung Anweisungen findet.
In einer main
Funktion sind die return
Anweisung und der Ausdruck optional. Was mit dem zurückgegebenen Wert passiert, wenn einer angegeben wird, hängt von der Implementierung ab. Microsoft-spezifisch: Die Microsoft C-Implementierung gibt den Ausdruckwert an den Prozess zurück, der das Programm aufgerufen hat, z. B. cmd.exe
. Wenn kein return
-Ausdruck angegeben wird, gibt die Microsoft C-Laufzeit einen Wert zurück, der auf Erfolg (0) oder Fehler (ein Wert ungleich Null) hinweist.
Beispiel
Dieses Beispiel ist ein Programm in mehreren Teilen. Es zeigt die return
-Anweisung und wie sie sowohl zum Beenden der Funktionsausführung als auch optional zum Zurückgeben eines Werts verwendet wird.
// C_return_statement.c// Compile using: cl /W4 C_return_statement.c#include <limits.h> // for INT_MAX#include <stdio.h> // for printflong long square( int value ){ // Cast one operand to long long to force the // expression to be evaluated as type long long. // Note that parentheses around the return expression // are allowed, but not required here. return ( value * (long long) value );}
Die square
Funktion gibt das Quadrat ihres Arguments in einem breiteren Typ zurück, um einen arithmetischen Fehler zu vermeiden. Microsoft-spezifisch: In der Microsoft C-Implementierung ist der Typ long long
groß genug, um das Produkt zweier int
Werte ohne Überlauf aufzunehmen.
Die Klammern um den Ausdruck return
in square
werden als Teil des Ausdrucks ausgewertet und werden von der Anweisung return
nicht benötigt.
double ratio( int numerator, int denominator ){ // Cast one operand to double to force floating-point // division. Otherwise, integer division is used, // then the result is converted to the return type. return numerator / (double) denominator;}
Die ratio
Funktion gibt das Verhältnis ihrer beiden int
Argumente als Gleitkommawert double
zurück. Der Ausdruck return
wird gezwungen, eine Gleitkommaoperation zu verwenden, indem einer der Operanden in double
umgewandelt wird. Andernfalls würde der ganzzahlige Divisionsoperator verwendet und der Bruchteil würde verloren gehen.
void report_square( void ){ int value = INT_MAX; long long squared = 0LL; squared = square( value ); printf( "value = %d, squared = %lld\n", value, squared ); return; // Use an empty expression to return void.}
Die report_square
Funktion ruft square
mit einem Parameterwert von INT_MAX
den größten ganzzahligen Wert mit Vorzeichen auf, der in eine int
. Das long long
-Ergebnis wird in squared
gespeichert und dann gedruckt. Die report_square
Funktion hat einen void
Rückgabetyp, daher hat sie keinen Ausdruck in ihrer return
Anweisung.
void report_ratio( int top, int bottom ){ double fraction = ratio( top, bottom ); printf( "%d / %d = %.16f\n", top, bottom, fraction ); // It's okay to have no return statement for functions // that have void return types.}
Die report_ratio
Funktion ruft ratio
mit Parameterwerten von 1
und INT_MAX
auf. Das double
-Ergebnis wird in fraction
gespeichert und dann gedruckt. Die report_ratio
Funktion hat einen void
Rückgabetyp, so dass es nicht explizit einen Wert zurückgeben muss. Die Ausführung von report_ratio
„fällt vom Boden ab“ und gibt dem Aufrufer keinen Wert zurück.
int main(){ int n = 1; int x = INT_MAX; report_square(); report_ratio( n, x ); return 0;}
Die main
Funktion ruft zwei Funktionen auf: report_square
und report_ratio
. Da report_square
keine Parameter akzeptiert und void
zurückgibt, weisen wir das Ergebnis keiner Variablen zu. Ebenso gibt report_ratio
void
zurück, sodass wir den Rückgabewert auch nicht speichern. Nach jedem dieser Funktionsaufrufe wird die Ausführung mit der nächsten Anweisung fortgesetzt. Dann main
gibt einen Wert von 0
(normalerweise verwendet, um Erfolg zu melden), um das Programm zu beenden.
Um das Beispiel zu kompilieren, erstellen Sie eine Quellcodedatei mit dem Namen C_return_statement.c
. Kopieren Sie dann den gesamten Beispielcode in der angegebenen Reihenfolge. Speichern Sie die Datei und kompilieren Sie sie in einem Entwickler-Eingabeaufforderungsfenster mit dem folgenden Befehl:
cl /W4 C_return_statement.c
Geben Sie dann zum Ausführen des Beispielcodes C_return_statement.exe
an der Eingabeaufforderung ein. Die Ausgabe des Beispiels sieht folgendermaßen aus: