return statement
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
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
|
(since C11) |
Schlüsselwörter
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Verbesserung erforderlich |
#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
|