Namensräume
Varianten
Aktionen

return-Anweisung

Von cppreference.com
< c‎ | Sprache

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

Inhalt

[bearbeiten] Syntax

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

[bearbeiten] Erklärung

1) Evaluiert den Ausdruck, 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, als ob er einem Objekt zugewiesen würde, dessen Typ der Rückgabetyp der Funktion ist, mit der Ausnahme, dass Überlappungen zwischen Objektrepräsentationen zulässig sind.

struct s { double i; } f(void); // function returning struct s
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; // undefined behavior (overlap in assignment)
   g.u2.f3 = f();     // well-defined
}

Wenn der Rückgabetyp ein reeller Gleitkommatyp ist, kann das Ergebnis in einem größeren Bereich und höherer Präzision als vom neuen Typ impliziert dargestellt werden.

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

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

(seit C11)

[bearbeiten] Schlüsselwörter

return

[bearbeiten] Beispiel

#include <stdio.h>
 
void fa(int i)
{
    if (i == 2)
       return;
    printf("fa():   %d\n", i);
} // implied 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);   // the return value 4 used to initializes i
    i = fb(i);       // the return value 2 used as rhs of assignment
    printf("main(): %d\n", i);
}

Ausgabe

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

[bearbeiten] Referenzen

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

[bearbeiten] Siehe auch

C++-Dokumentation für return-Anweisung