Im Beispiel taucht der Befehl return
auf, der für
die Rückgabe eines Wertes sorgt. Er muß von einem Wert des
Rückgabetypes - in diesem Fall float
- gefolgt
werden. Falls dieser Befehl bei einer Funktion fehlt, die einen
Rückgabewert haben soll (d.h. nicht vom Typ void
ist), wird dies in der Regel angewarnt. Als Rückgabewerte sind
fast alle Datentypen erlaubt, einzige Ausnahmen sind Arrays und
Funktionen. Allerdings dürfen Zeiger auf solche zurückgegeben
werden, doch dies erst später.
Auch wenn immer nur ein Wert zurückgegeben werden darf, kann
man im Prinzip beliebig viel Information über diesen Mechanismus
zur Verfügung stellen, da beliebig komplexe Datentypen
zurückgegeben werden können. Dies bezieht sich insbesondere
auf Typen, die mit der schon kennengelernten struct
-Anweisung
gebildet wurden und auf die noch kommenden Objektklassen
. Diese Form der Rückgabe ist der Rückgabe über
Parameter
insofern überlegen, als daß es
häufig schwierig ist, zu unterscheiden, ob ein Parameter nun bei
der Übergabe an eine Funktion geändert wird oder nicht. Das
Schema Parameter rein - Rückgabewert raus läßt sich
oft intuitiver nutzen, als eine Mischung aus Ein- und
Ausgabeparametern, die evtl. sogar noch um einen Rückgabewert
ergänzt wurden.
Andererseits wird für den Rückgabewert immer Speicherplatz reserviert, was nicht immer gewünscht sein muß. Auch kann man immer nur einen Rückgabewert nutzen, der zwar beliebig komplex sein kann, aber nicht immer möchte man aus vielen einzelnen Daten ein einziges machen. In beiden Fällen kann man dann auf Referenzparameter zurückgreifen.
Der Wert, der zurückgegeben werden soll, darf an Ort und Stelle berechnet werden. Ein Beispiel für eine damit sehr knapp gehaltene Funktion ist die folgende, aber man sollte sich bewußt sein, daß man mit solchen Techniken den Quelltext schnell schwer lesbar machen kann. Andererseits kann man sich so teilweise Hilfsvariablen sparen, die vom Compiler zunächst angelegt, dann bei der Rückgabe kopiert und danach wieder gelöscht werden müßten.
int maximum(int a, int b) { return (a>b)?a:b; // keine Hilfsvariable noetig }