Namespaces
Variants

return statement

From cppreference.net

Beendet die aktuelle Funktion und gibt den angegebenen Wert an die aufrufende Funktion zurück.

Inhaltsverzeichnis

Syntax

attr-spec-seq (optional) return expression ; (1)
attr-spec-seq (optional) return ; (2)
expression - Ausdruck, der zur Initialisierung des Rückgabewerts der Funktion verwendet wird
attr-spec-seq - (C23) optionale Liste von Attributen , angewendet auf die return -Anweisung

Erklärung

1) Wertet den Ausdruck aus, beendet die aktuelle Funktion und gibt das Ergebnis des Ausdrucks an den Aufrufer zurück (der zurückgegebene Wert wird zum Wert des Funktionsaufrufausdrucks). Nur gültig, wenn der Rückgabetyp der Funktion nicht void ist.
2) Beendet die aktuelle Funktion. Nur gültig, wenn der Rückgabetyp der Funktion void ist.

Wenn der Typ des Ausdrucks vom Rückgabetyp der Funktion abweicht, wird sein Wert konvertiert wie durch Zuweisung an ein Objekt, dessen Typ der Rückgabetyp der Funktion ist, mit der Ausnahme, dass Überlappungen zwischen Objektrepräsentationen erlaubt sind:

struct s { double i; } f(void); // Funktion, die struct s zurückgibt
union { struct { int f1; struct s f2; } u1;
        struct { struct s f3; int f4; } u2; } g;
struct s f(void)
{
    return g.u1.f2;
}
int main(void)
{
// g.u2.f3 = g.u1.f2; // undefiniertes Verhalten (Überlappung bei Zuweisung)
   g.u2.f3 = f();     // wohldefiniert
}

Wenn der Rückgabetyp ein echter Gleitkommatyp ist, kann das Ergebnis in größerem Wertebereich und höherer Genauigkeit dargestellt werden, als durch den neuen Typ impliziert.

Das Erreichen des Endes einer Funktion, die void zurückgibt, ist gleichbedeutend mit return ; . Das Erreichen des Endes jeder anderen wertrückgebenden Funktion ist undefiniertes Verhalten, wenn das Ergebnis der Funktion in einem Ausdruck verwendet wird (es ist erlaubt, solchen Rückgabewert zu verwerfen). Für main , siehe main function .

Die Ausführung der return -Anweisung in einer No-Return-Funktion ist undefiniertes Verhalten.

(since C11)

Schlüsselwörter

return

Beispiel

#include <stdio.h>
void fa(int i)
{
    if (i == 2)
       return;
    printf("fa():   %d\n", i);
} // implizites return;
int fb(int i)
{
    if (i > 4)
       return 4;
    printf("fb():   %d\n", i);
    return 2;
}
int main(void)
{
    fa(2);
    fa(1);
    int i = fb(5);   // der Rückgabewert 4 wird zur Initialisierung von i verwendet
    i = fb(i);       // der Rückgabewert 2 wird als rechte Seite der Zuweisung verwendet
    printf("main(): %d\n", i);
}

Ausgabe:

fa():   1
fb():   4
main(): 2

Referenzen

  • C17-Standard (ISO/IEC 9899:2018):
  • 6.8.6.4 Die return-Anweisung (S: 111-112)
  • C11-Standard (ISO/IEC 9899:2011):
  • 6.8.6.4 Die return-Anweisung (S: 154)
  • C99-Standard (ISO/IEC 9899:1999):
  • 6.8.6.4 Die return-Anweisung (S: 139)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 3.6.6.4 Die return-Anweisung

Siehe auch

C++ Dokumentation für return statement