Wir haben die Kompatibilität von Typen schon erwähnt, wollen aber hier noch einmal kurz darauf eingehen, um die Diskussion der Prototypen zu komplettieren. Kompatibel sind alle einfachen Typen, die untereinander sinnvoll umgewandelt werden können. Wenn Du zum Beispiel eine ganze Zahl als eigentlichen Parameter verwendest, die Funktion allerdings eine Variable vom Typ float als formellen Parameter verlangt, führt das System die Umwandlung automatisch durch, ohne daß Du etwas davon bemerkst. Dasselbe gilt auch für float nach char und char zu int. Es gibt strikte Regeln für die Typenumwandlung, die Du zum Beispiel in Kapitel 3.2 des ANSI-C Standards findest.
Wenn wir der Funktion als eigentlichen Parameter einen Zeiger auf eine Variable vom Typ int übergeben, die Funktion aber als formellen Parameter eine Variable vom Typ int erwartet, erfolgt keine automatische Umwandlung, da es sich um zwei komplett verschiedene Arten von Werten handelt. So würde auch eine Struktur nicht automatisch in einen long float, einen array oder auch nur in irgendeine andere Struktur umgewandelt werden, da alle diese inkompatibel sind und nicht sinnvoll umgewandelt werden können. Alles in Kapitel 2 über Typenkompatibilität gesagte gilt auch für die Kompatibilität beim Funktionsaufruf. Genauso muß der Typ des Rückgabewertes, in diesem Fall void, mit dem erwarteten Typ im Funktionsaufruf kompatibel sein. Andernfalls gibt der Compiler eine Warnung aus.
Copyright © 1997, 1998, 2001-2006 Heinz Tschabitscher - Letzte Änderung 10. Dezember 2005
Heinz Tschabitscher - | Datenschutz | Impressum - Kommentare, Kritik, Anregungen, Beschwerden?