Die Wertrückgabe in C
Der Wert einer Funktion wird durch eine in der Funktion vorkommende Rückgabeanweisung festgelegt, die eine Art von Sprunganweisung 〈jump-statement 〉 ist.
- 〈jump-statement 〉 ::=
- "return" [〈expression 〉] ";".
Beispiel: Wie viele Tage haben 2 Wochen?
Das folgende Beispiel zeigt die Verwendung der Rückgabeanweisung in C.
In der Definition der Funktion "Anzahl_der_Tage_einer_Woche" wird als Ergebnis der Wert des Ausdrucks "7" festgelegt. Der Datentyp "int" wird hier vor dem Funktionsnamen anstelle des bei Wirkfunktion üblichen Datentyps "void" angegeben, um festzulegen, daß das Ergebnis der Funktion vom Datentyp "int" ist.
main.c
#include <stdio.h>
int main( void )
{ printf( "%d\n", 2 * 7 ); }stdout
14
main.c
#include <stdio.h>
int Anzahl_der_Tage_einer_Woche( void )
{ return 7; }int main( void )
{ printf( "%d\n", 2 * Anzahl_der_Tage_einer_Woche() ); }stdout
14
main.c
#include <stdio.h>
int Anzahl_der_Tage_einer_Woche( void )
{ return 7; }int Anzahl_der_Tage_zweier_Wochen( void )
{ return 2 * Anzahl_der_Tage_einer_Woche(); }int main( void )
{ printf( "%d\n", Anzahl_der_Tage_zweier_Wochen() ); }stdout
14
Mit der Rückgabeanweisung wird auch die Kontrolle an den Aufrufer der Funktion zurückgegeben. Daher werden nachfolgende Anweisungen nicht mehr ausgeführt. Deswegen gilt die Rückgabe auch als Sprunganweisung.
main.c
#include <stdio.h>
int f( void )
{ puts( "A" );
return 7;
puts( "B" ); }int main( void )
{ printf( "%d\n", f() ); }stdout
A
7
Die main-Funktion
main.c
int main( void ) { return 0; }
Konsole
--------------------------------
Process exited with return value 0
Press any key to continue . . .main.c
int main( void ) { return 22; }
Konsole
--------------------------------
Process exited with return value 22
Press any key to continue . . .main.c
#include <stdlib.h>
int main( void ) { return EXIT_SUCCESS; }
Konsole
--------------------------------
Process exited with return value 0
Press any key to continue . . .main.c
#include <stdlib.h>
int main( void ) { return EXIT_FAILURE; }
Konsole
--------------------------------
Process exited with return value 1
Press any key to continue . . .
Übungsfragen
Übungsfrage
main.c
#include <stdio.h>
int f( void )
{ puts( "A" );
return 7; }int main( void )
{ printf( "%d\n", f() ); }stdout
A
7- Welchen Wert ergibt die Auswertung des Ausdrucks »f()« in dem obigen Programm?
- Welche Wirkung hat die Auswertung des Ausdrucks »f()« in dem obigen Programm?
Übungsfrage 1
- Was ist die Ausgabe des folgenden Programms?
main.c
#include <stdio.h>
int f( void )
{ return 4; }int g( void )
{ return f() + f() + 2; }int main( void )
{ printf( "%d\n", g() ); }
/ Funktionsdefinition
Schreiben Sie eine Definition einer Funktion, die das Zeichen »7« ausgibt.
Die Funktion soll außer dem im ersten Absatz Beschriebenen nichts anderes machen und nichts Überflüssiges enthalten.
/ Funktionsdefinition (1)
Hinweis für den Dozenten ► Diese Übungsaufgabe sollte erst nach der Nachbesprechung der vorherigen Übungsaufgabe behandelt werden.
Schreiben Sie eine Definition einer Funktion, die den Wert »5« zurückgibt (ein Aufruf jener Funktion soll den Typ »int« haben).
Die Funktion soll außer dem im ersten Absatz Beschriebenen nichts anderes machen und nichts Überflüssiges enthalten.
/ Funktionsdefinition (2)
Hinweis für den Dozenten ► Diese Übungsaufgabe sollte erst nach der Nachbesprechung der vorherigen Übungsaufgabe behandelt werden.
Schreiben Sie eine Definition einer Funktion, die das Zeichen »9« ausgibt und den Wert »3« zurückgibt (ein Aufruf jener Funktion soll den Typ »int« haben).
Die Funktion soll außer dem im ersten Absatz Beschriebenen nichts anderes machen und nichts Überflüssiges enthalten.
/ Funktionsdefinition _
Ersetzen Sie die Lücke »…« in dem folgenden Text durch die Definition einer reinen Wirkfunktion »j()«, welche die Funktion »k()« aufruft und den von der Funktion »k()« erhaltenen Rückgabewert ausgibt.
Programm mit Lücke
#include <stdio.h>
#include <stdlib.h>
#include <math.h>double k( void ) { return log( rand() ); }
…
int main( void )
{ j(); }
/ eine Weiterleitungsfunktion (Zufallszahlenfunktion) _
Unter einer Weiterleitungsfunktion verstehen wir hier eine Funktion, deren Rumpf nur eine Rückgabeanweisung, eine Ausgabeanweisung oder eine Aufrufanweisung enthält, die nur den Aufruf einer einzigen Funktion enthält (eventuelle Argumente jener Funktion sollen also keine Aufrufe enthalten).
Schreiben Sie die Definition einer reinen Wertfunktion »random«, welche die Standardfunktion »rand« aufruft und den erhaltenen Wert zurückgibt.
Zusatzaufgaben
- ? Würfel
- Schreiben Sie eine Wertfunktion »wuerfel«, die eine ganzzahlige Zahl ergibt, die größer-gleich 1 und kleiner-gleich 6 ist. (Falls »wuerfel« in einem Programm mehrfach aufgerufen wird, soll die nächste Zahl nicht vorhersagbar sein.)