|
void main (void)
{
double a= 2.5, b= 5.38, c= 12.362;
double erg;
erg = volumen(a, b, c); // Aufruf
printf ("Volumen = %f", erg);
}
|
|
|
|
- Beschreibung der Definition von volumen()
-
Die Funktion volumen() erhält
drei Fliesskommazahlen über den Stack, den man sich als
Zwischenspeicher vorstellen kann, übergeben und weist
diese den Variablen l-für Länge, b-für Breite
und h-für Höhe zu.
-
Sie soll das Ergebnis in Form einer doppeltgenauen
Fliesskommazahl, also in 8 Bytes zurückgeben. Damit dies
geschieht, ist der Befehl return() notwendig. In den Klammern
von return, steht die Variable e, die das zuvor errechnete
Ergebnis der Variablen abc enthält. Deren Wert
wird durch den return()-Befehl in die Prozessorregister der CPU
geladen, dann wird die Funktion beendet. Mit dieser Funktion
lässt sich also das Volumen eines rechteckigen Körper
berechnen.
-
-
Wie gesagt erhält die Funktion volumen()
von main() drei Fliesskommazahlen übergeben und weist sie
den Variablen l, b und h zu. Da die Zahlen vom aufrufenden
Programm auf den Stack gelegt wurden, enthält l den Wert
der Variablen a des main()-Programms, der ist 2.5 und b
entsprechend den von b, also 5.3 sowie h den von c, mit dem
Wert 12.362. Wegen des geschilderten Übergabemechanismus
würden die Variablen a, b, c der main()-Funktion auch dann
unverändert bleiben, wenn in der Funktion volumen() die
Variablen l, b, h verändert würden. l,b,h stellen nur
Kopien der Werte des aufrufenden Programms dar, auch dann, wenn
wie bei b, die Variablen gleiche Namen tragen. Man sagt die
Variablen der Funktion seien lokal.
-
-
Beschreibung der Deklaration von volumen()
-
Die Deklarationszeile im Kopf des Programms ist notwendig, da
die Funktion erst definiert wird, nachdem ihr Aufruf im
main()-Programm erfolgte. Der Compiler hätte ohne die
Deklarationszeile keine Möglichkeit gehabt, die
Richtigkeit des Aufrufs zu überprüfen um eine
eventuelle Fehlermeldung abzugeben. Er kennt ja die
Eigenschaften von volumen() zu diesem Zeitpunkt noch nicht. Die
angegebene Deklarationszeile ist die Mindestversion.
Eigendlicht braucht der Compiler zur Überprüfung nur
die Angaben, wieviele Variablen übergeben werden sollen
und von welchem Typ die Rückgabe- und die
Übergabevariablen sind. Diese Angaben wurden gemacht.
-
-
Allerdings hätten in der Deklaration auch noch
Variablennamen genannt werden können. Diese wären
jedoch nur für den Programmierer von Interesse, da er
später über aussagekräftige Variablennamen in
der Deklarationszeile seine Erinnerung auffrischen kann.
-
-
Beispiel:
double volumen( double
lang, double breit, double
hoch);
- Die Variablennamen der Deklaration haben also weder etwa
mit den Namen des Aufrufs noch mit den Namen der Definition zu
tun. Alle drei Orte an denen die Namen auftreten sind
unabhängig voneinander. In der Deklarationszeile sollten
sie aussagekräftig sein, bei der Definition sollten sie
kurz sein, ebenso in der Funktion, welche einen Aufruf
vornimmt.
-
-
Beschreibung von main()
-
In main() wird die Funktion durch erg=volumen(a,b,c);
aufgerufen. Ihr werden die zuvor deklarierten, definierten und
initialisierten Variablen a und b übergeben. Dies
geschieht durch eine Kopie der Inhalte von a, b und c auf den
Stack. Dadurch sind die Variablen a, b und c vor
gleichlautenden Variablen in anderen Funktionen geschützt.
Sie haben nichts mit denen gemein. Nachdem volumen() ausgeführt
wurde, kehrt die Programmausführung nach main() zurück
und in den Prozessorregistern der CPU steht das Ergebnis der
Volumenberechnung. Dieses sollte (muss aber nicht) in eine
Variable, hier erg, von
main() übertragen werden, was ja geschieht. Der Inhalt der
Ergebnisvariablen erg wird
durch die Bibliotheksfunktion printf() auf den Bildschirm
ausgegeben, auf dem die Ausgabe erscheint ..
-
-
Volumen = 166.2689
-
-
Schlusszustand:
-
Im Hauptprogramm main() besitzen die Variablen a,
b und c noch
immer ihre alten Werte, zudem wurde die Variable erg
mit dem Ergebnis gefüllt. Nach dem Rücksprung von
volumen() zum Hauptprogramm
main() wurde der Stack
gelöscht und damit die Variablen l,
b und h. Ebenso
erging es der dort neu eingerichtete Variable e.
Wäre das Ergebnis von volumen()
nicht nach erg übernommen
worden, wäre es jetzt verloren.
|
|