Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 81<br />
muss jedoch wissen, was der Name bedeuten soll – spätestens beim ersten Funktionsaufruf.<br />
Dazu dient eine Funktionsdeklaration; sie führt den Namen ein, teilt dem Compiler mit,<br />
welche Parameter und welchen Rückgabetyp die Funktion hat.<br />
Funktionsdeklarationen werden in C ++/C sehr häufig benutzt, selbst dann wenn sie vermeidbar<br />
wären, weil die Definition vor dem ersten Gebrauch geschehen könnte.<br />
(7.23) 10/11 FunktionsDeklaration <br />
12/14 RückgabeTyp 30/32,Alt.4 FunktionsBezeichner ( ParameterDekl.-LISTEopt ) ;<br />
Eine Funktionsdeklaration ist syntaktisch einer Funktionsdefinition sehr ähnlich, s. (7.11a),<br />
nur statt des Funktionsblockes (ZusammengesetzteAnweisung) steht ein Semikolon.<br />
Mit der Funktionsdeklaration erhält der Compiler die Information über:<br />
• Funktionsname,<br />
• Signatur der Funktion (Anzahl, Typ, Reihenfolge der Parameter),<br />
• Rückgabetyp.<br />
Es fehlt ihm hier nur noch die Information über die Einsprungadresse in die Funktion, s.<br />
(7.14c). Diese Einsprungadresse muss später eingesetzt werden, und zwar<br />
• durch den Compiler, wenn die Definition später in der gleichen Programmdatei erfolgt,<br />
• durch den Linker, wenn die Funktion woanders definiert wird.<br />
Bsp Deklaration aller Funktionen aus Beispielprogramm (7.13):<br />
int wertPlus1(int wert);<br />
int summe(int par1, int par2);<br />
int zahlFest();<br />
void intDruck(int wert);<br />
Anm1 In den Headerdateien sind viele Funktionsdeklarationen vorhanden, z. B.<br />
: get, getline;<br />
: strcpy, strcat, strlen.<br />
Anm2 In einer Deklaration (i. a. nicht in einer Definition) ist es erlaubt, den Namen – nicht den<br />
Typ – der formalen Parameter wegzulassen.<br />
Empfehlung: Namen nicht weglassen, da (hoffentlich!) die Bedeutung der Parameter beschreibend<br />
( ” selbstdokumentierender Name“).<br />
Beispiel:<br />
double potenz(double basis, double exp); // empfohlen<br />
double potenz(double, double); // erlaubt - aber Bedeutung der Par.?<br />
Anm3 Eine Funktionsdeklaration darf mehrfach vorhanden sein, solange sich die Deklarationen<br />
nicht widersprechen (Übereinstimmung Name, Signatur, Rückgabetyp – Parameternamen<br />
dürfen unterschiedlich sein; eine unterschiedliche Signatur führt zu unterschiedlichen Funktionen,<br />
vgl. (7.61)). Eine Deklaration ist auch erlaubt, wenn die Funktion nicht aufgerufen<br />
wird. Eine Funktionsdefinition dagegen darf nur genau einmal auftreten; wenn die Funktion<br />
nicht benutzt wird, darf sie auch fehlen.<br />
↑↑ Bei virtuellen Elementfunktionen (einer Klasse) muss auch dann eine Definition vorhanden<br />
sein, wenn die Elementfunktion nicht benutzt wird, siehe (11.42 ↑↑1).<br />
Anm4 C △! Wenn kein Parameter vorhanden ist, dann sollte in der Definition und in der Deklaration<br />
auf jeden Fall statt<br />
RückgabeTyp FunktionsName() // leere Parameterliste<br />
besser folgendes geschrieben werden:<br />
RückgabeTyp FunktionsName(void)<br />
7.3 Referenztyp<br />
Die Schreibweise mit void ist auch in C++ erlaubt, aber nicht nötig; in C ist sie sehr<br />
wichtig, da die Schreibweise mit leerem Klammernpaar aus historischen Gründen eine andere<br />
Bedeutung hat (Funktion mit einer nicht näher spezifizierten Anzahl von Parametern).<br />
(7.30) Übb Durch eine Referenz wird zu einer bereits existierenden Variablen ein Synonym erzeugt,<br />
d. h. ein zusätzlicher Name, der auf denselben Speicherplatz wie der Originalname<br />
verweist. In diesem Unterkapitel wird allgemein gezeigt, wie in C ++ eine Referenz erzeugt