| Axel Rogat |
| Objektorientiertes Programmieren mit C++ und JAVA |
|   |
7: Funktionen
| Kapitel 7 |
7.2: Funktionsdefinitionen 
|
|   |
|   | 7.1 Funktionsdeklarationen |   |
|   |
Wenn Funktionen in einer Übersetzungseinheit verwendet werden sollen, in denen sie nicht definiert sind, oder in der gleichen Übersetzungseinheit, aber vor ihrer Definition, müssen sie deklariert werden. Das bedeutet, daß der Compiler genau alle für den bloßen Aufruf wichtigen Informationen erhält, nämlich die Typen der Formalparameter und den zurückgegebenen Typ:
Die tatsächlichen Argumente, die eine Funktion bei einem Aufruf übergeben bekommt, heißen Aktualparameter. Eine Funktionsdeklaration wird auch als Prototyp der Funktion bezeichnet.
Bei extern oder gar keiner angegebenen Speicherklasse wird der Name der Funktion in die Symboltabelle für den Linker aufgenommen, so daß sie aus anderen Übersetzungseinheiten heraus aufgerufen werden kann (wo sie allerdings deklariert werden sollte).
Die Aktualparameter brauchen nicht genau vom Typ des zugehörigen Formalparameters zu sein, lediglich mit ihm kompatibel, d.h. wie in einer entsprechenden Zuweisung einer Variable an eine andere. Es finden dann die standardmäßigen automatischen Typumwandlungen statt.
So ist zum Beispiel ohne Probleme der Aufruf sin(1) möglich -- es wird vom Compiler automatisch eine Typumwandlung durchgeführt, falls eine passende existiert. In diesem Fall würde intern ein Aufruf sin(1.0) erzeugt.
In C++ ist das nicht erlaubt, und auch in C sollte man davon keinen Gebrauch machen. Dem Compiler ist so nämlich keinerlei Überprüfung für die Parameter und Rückgabetypen möglich. Der Rückgabetyp wird so als int angenommen, und die Typen der Formalparameter werden von den Typen dieser Aktualparameter übernommen: in unserem Beispiel
|   |
7: Funktionen
| Startseite |
7.2: Funktionsdefinitionen 
|
|   |