Was macht "return" in C konkret, bitte einfach erklärt?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Nachdem eine Funktion aufgerufen wurde, gibt return einen bestimmten Wert an den Aufrufer zurück und kehrt aus dieser Funktion zurück, indem es sie an dieser Stelle "unterbricht"

Angenommen, wir haben die Funktion addieren mit

int addieren(int a, int b){
  return a+b;
}

Wenn wir dies nun in der Mainmethode aufrufen, können wir mit dem zurückgegebenen Wert weiterarbeiten oder ihn ausgeben

Beispiel:

int main (){
  int a = 2;
  int b = 3;
  int c = addieren(a, b);
  printf("Die Summe von %i und %i ist %i\n", a, b, c);
}

jetzt haben wir den return-Wert in der Variable c gespeichert und geben ihn hier z.B. nur aus. Man könnte ihn jetzt aber weiter verändern

Es kehrt aus der aufgerufenen Funktion zurück.

Die Ausführung der Funktion wird beendet (ggf. abgebrochen), der Rückgabewert wird an den Aufrufer übergeben und die Ausführung an der Stelle nach dem Funktionsaufruf fortgesetzt.

Technisch wird das dadurch umgesetzt, dass der Aufrufer die Aufrufparameter, sowie die Rücksprungadresse (= aktueller Wert des "program counter"-Registers) auf den Stack legt und die aufgerufene Funktion beim "return" anschließend den Stackframe wieder "abräumt" und den gesicherten "program counter" wiederherstellt. Der Rückgabewert kann auf verschiedene Arten zum Aufrufer gelangen. Entweder wird er in ein Register geschrieben, oder er wird ebenfalls über den Stack übergeben.

eine Funktion (man kann sie auch  "Unterprogramm" nennen) kehrt, wenn sie beendet ist, an die Stelle im übergeordneten Programm zurück, an der sie aufgerufen wurde.
Normalerweise sollte so eine Funktion sich auch wirklich mal beenden und irgendwelche Ergebnisse bereitstellen.

Solche Ergebnisse werden in globalen "Programmweit" geltenden Variablen  gespeichert oder aber mit dem Befehl "return <RückgabeWert> an das aufrufende Programm zurück gegeben. Das muss diesen Wert natürlich auch entgegennehmen.

Mit return kann man aber auch eine Funktion zum vorzeitigen Beenden zwingen. Man steigt so aus Schleifen  ( do ...  , while ... for ) aus, wenn das Ergebnis vorliegt und muss dann nicht Schleifen mit break und zusätzlichen "Klimmzügen" verlassen.


leon1231223423  05.07.2022, 13:18

Was gibt man dann ein für den Rückgabewert?

0
guenterhalt  06.07.2022, 08:45
@leon1231223423

das ergibt sich aus dem Unterprogramm.
Da kann man viel Dinge an das aufrufende Programm zurück geben. Das fängt bei einfachen konstanten Zahlenwerten oder Buchstaben an.
Häufig wird 0 ( für "alles o.k." ), 1 ( für "Fehler 1" ) , 2 (für "Fehler 2" ) .... zurückgegeben.
Das kann man dann im aufrufenden Programm in einer if- oder case-Anweisung auswerten. Was man unter Fehler 1 ... versteht, muss der Programmierer festlegen.

Außer Zahlen werten oder Buchstaben 'a' , 'b' .... oder '0' ('0' ist hier wie ein Buchstabe zu sehen, der den Zahlenwert 30hex hat ), kann man auch z.B. Zeiger auf Zeichenketten (arrays ...) zurückgeben.

0

Es wird eine Adresse vom Stack gelesen und dorthin gesprungen. Die aktuelle Funktion oder Methode wird dadurch verlassen.