Rückgabewerte in C
Das folgende Programm gibt eine mehr oder weniger zufällig ausgewählte int-Zahl zwischen »0« (einschließlich) und <stdlib.h> »RAND_MAX« (einschließlich) aus.
main.c
#include <stdio.h> /* printf */
#include <stdlib.h> /* rand */ int main( void )
{ printf
( "%d\n", rand() ); }stdout
41
Wenn der Aufrufausdruck »rand()« in den Ausdruckrahmen geschrieben wird, so wird dadurch bestimmt, daß der auszugebende Wert bei der Ausführung des Programms von der Auswertung des Ausdrucks »rand()« ermittelt werden soll.
Dieser Wert ergibt sich dann dadurch, daß gegen Ende des Aufrufvorgangs von der Funktion »rand()« ein Wert für diesen Aufrufausdruck festgelegt wird. Wegen dieser Festlegung eines Wertes nennt man diesen Vorgang ja auch die Auswertung (also die Ermittlung des Wertes) des Ausdrucks »rand()«.
Bei der Auswertung eines Aufrufausdrucks wird die Funktion dieses Ausdrucks aktiviert, wir sagen auch: der Aufruf wird ausgeführt. Das bedeutet nichts anderes als daß diese Funktion nun bestimmt, was der Rechner tut. Daher sagt man auch, daß diese Funktion durch die Ausführung des Aufrufs die Kontrolle (über den Rechner) erhält.
Wird die Kontrolle über den Rechner nun von unserem Hauptprogramm an die Funktion »rand()« übergeben, so kehrt die Kontrolle normalerweise nach einer Weile wieder aus dieser Funktion »rand()« zurück. Die Kontrolle wird also von der aufgerufenen Funktion schließlich (an unseren Ausdruckrahmen) zurückgegeben.
Weil gleichzeitig mit dieser Rückkehr auch der Wert des Ausdrucks geliefert wird, sagt man auch, daß er zusammen mit der Kontrolle von der Operation zurückgegeben werde, und bezeichnet ihn auch als Rückgabewert. (Der Rückgabewert von »rand()« wird danach von unserem Ausdruckrahmen ausgegeben.) Am Ende der Ausführung einer Funktion steht also die Rückgabe der Kontrolle und eines eventuellen Rückgabewertes an jene Stelle, von der aus diese Funktion aufgerufen wurde.
- Übergabe und Rückgabe der Kontrolle zur Laufzeit mit Wertrückgabe
.-------------------------------------.
| Hauptprogramm----. |
| | Übergabe der |
| V Kontrolle |
| .---------------. |
| | Unterprogramm | |
| '---------------' |
| | Rückgabe der |
| | Kontrolle |
|<-----------------' |
| Rueckgabewert |
| |
'-------------------------------------'- »main« und »rand« bei der oben gezeigten Ausführung
.-------------------------------------.
| main-------------. |
| | |
| V |
| .---------------. |
| | rand() | |
| '---------------' |
| | |
| | |
|<-----------------' |
| 41 |
| |
'-------------------------------------'
In dem folgenden Beispiel einer Auswertung des Ausdrucks »rand()« wurde als auszugebender Wert beispielsweise 41 festgelegt, also „zurückgegeben“. Der Rückgabewert ist also 41.
main.c
#include <stdio.h> /* printf */
#include <stdlib.h> /* rand */ int main( void )
{ printf
( "%d\n", rand() ); }stdout
41