Rückgabewerte (1/3)

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
  }