Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

5.7 Funktionsprototypen

5.7 Funktionsprototypen

Ihnen ist vielleicht schon aufgefallen, dass ich bisher nur Funktionen aufgerufen habe, welche im Quelltext darüber standen. Im Normalfall muss das auch so sein, da ein Quelltext von oben nach unten abgearbeitet wird und man so nur auf Sachen verweisen kann, die bereits erwähnt wurden. Sie müssen sich das wie in einem Buch vorstellen. Angenommen Sie sind in Kapitel 2 und der Autor schreibt "„... Die Begründung haben wir bereits in Kapitel 20 kennen gelernt.". Aus Sicht des Lesers macht das keinen Sinn, da er ein Buch üblicherweise auch von vorne nach hinten ließt und man somit nicht Sachen wissen kann, welche erst später erwähnt werden.

Man muss also immer darauf achten, dass man seine Funktionen so anordnet, dass benötigte Funktionen weiter oben stehen. Aber muss das wirklich so sein? Angenommen Sie hätten so ein Buch, in welchem der Autor Sie auf ein späteres Kapitel verweist. Was machen Sie? Sicherlich werden Sie zu diesem Kapitel hin springen und dort schnell vorlesen. Aber wie genau funktioniert dieses hin springen? Klappen Sie das Buch an einer willkürlichen Stelle auf und schon haben Sie das richtige Kapitel? Wahrscheinlich nicht. Was Sie sicherlich tun werden ist, das Inhaltsverzeichnis am Anfang des Buches aufzuschlagen, um dort die benötigte Seitenzahl in Erfahrung zu bringen und genau so eine Art Inhaltsverzeichnis kann man auch für Funktionen bauen. Das benötigte Hilfsmittel sind die s.g. Funktionsprototypen. Falls Sie sich also keine Gedanken über die Reihenfolge Ihrer Funktionen machen wollen, dann können Sie am Anfang der Datei alle Funktionen (außer die "main") formal definieren und dann weiß; der Compiler schon im Vorfeld, dass es die Funktion gibt und wo er danach suchen muss.

Als erstes möchte ich noch einmal verdeutlichen, wie die Situation ohne Funktionsprototypen aussieht.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
					
int Kapitel1() {
	// Kann keine dieser Funktionen aufrufen
}

int main(int argc, char* argv) {
	// Kann nur Kapitel1 aufrufen
}

void Kapitel2(int iWert) {
	// Kann nur Kapitel1 aufrufen
}
					

Hier sehen Sie noch einmal, welche Funktion normalerweise welche Funktion aufrufen darf/kann. Um dies zu umgehen, werde ich im folgenden Quelltext, besagte Funktionsprototypen einführen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
					
// Inhaltsverzeichnis für diese Datei ///////////////////////////////////
int		Kapitel1();		// Funktionsprototyp für Kapitel1
void		Kapitel2(int iWert);	// Funktionsprototyp für Kapitel2
//////////////////////////////////////////////////////////////////////////



int Kapitel1() {
	// Kann jetzt Kapitel2 aufrufen
}

int main(int argc, char* argv) {
	// Kann Kapitel1 und jetzt auch Kapitel2 aufrufen
}

void Kapitel2(int iWert) {
	// Kann Kapitel1 aufrufen
}
					

Was Ihnen sofort auffallen sollte ist, dass man also die formale Deklaration des Funktionskopfes, an den Anfang der Datei kopiert. Der einzige und wichtigste Unterschied ist jedoch, dass man nach dem Funktionskopf ein Semikolon setzt! Hier benutzt man keine geschweiften klammern. Würde man dies tun, hätte man keinen Inhaltsverzeichniseintrag, sondern eine normale Funktion. Sie können sich folgende Eselsbrücke merken. Steht hinter einem Funktionskopf ein Semikolon, dann ist dies wie eine Seitenzahl anzusehen, welche nur im Inhaltsverzeichnis eines Buches, hinter einem Kapitelnamen steht. Steht hinter einem Funktionskopf eine geöffnete geschweifte Klammer, dann stellt jene Abschnitt einen ganz normalen Fließtext dar, also diverse Sätze und so etwas finden Sie nur innerhalb des Buches und somit handelt es sich um das eigentliche Kapitel, also um die eigentliche Funktion.

Im übernächsten Kapitel werde ich das Thema Header-Dateien ansprechen und genau dort sind solche Inhaltsverzeichnisse von Nöten und dort werde ich auf die Funktionsweise von Funktionsprototypen nicht weiter eingehen.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012