Return-Anweisung (C)

  • 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_ratiovoid 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:

Related Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.