4.7    Explizite Typumwandlung

Wollen Sie eine implizite Umwandlung des Compilers vermeiden, können Sie mithilfe des Cast-Operators die Typumwandlung selbst vornehmen. Eine solche explizite Anweisung, um dem Compiler die Umwandlung der Daten mitzuteilen, können Sie mit dem Cast-Operator wie folgt festlegen:

(Typ) Ausdruck

Damit weisen Sie den Compiler an, den Wert des Ausdrucks in den Typ umzuwandeln, der zwischen den Klammern angegeben ist. Zunächst ein Beispiel ohne den Cast-Operator:

01  int iVal1 = 10, iVal2 = 3;
02 double dVal = iVal1 / iVal2;
03 printf("%lf\n", dVal); // = 3.000…

Hier wird eine Ganzzahldivision von 10 durch 3 durchgeführt und dann an eine double-Variable zugewiesen. Da zwei int-Werte für die Division verwendet wurden, kann logischerweise kein Wert nach dem Komma dargestellt werden. Wäre nur einer der beiden Werte eine Gleitpunktzahl, würde intern eine übliche arithmetische Umwandlung durchgeführt. In diesem Beispiel kommt es daher zu einem Datenverlust.

In solch einem Fall können Sie sich mit einer expliziten Umwandlung mit dem Cast-Operator behelfen. Damit schreiben Sie dem Compiler vor, eine Typumwandlung durchzuführen. Bezogen auf unser Beispiel könnten Sie den Typ wie folgt explizit umwandeln:

01  int iVal1 = 10, iVal2 = 3;
02 double dVal = (double)iVal1 / (double)iVal2;
03 printf("%lf\n", dVal); // = 3.3333…

Der Wert von iVal1 und iVal2 wird jeweils explizit in einen double-Typ konvertiert, und die Berechnung wird an die double-Variable zugewiesen. Die Umwandlung gilt allerdings nur während dieser Ausführung. iVal1 und iVal2 bleiben nach wie vor vom Typ int.

In dem letzten Beispiel hätte es auch ausgereicht, nur einen der beiden Typen zu casten. Dank der üblichen arithmetischen Umwandlung wird aber auch der andere Typ automatisch umgewandelt:

01  int iVal1 = 10, iVal2 = 3;
02 double dVal = (double)iVal1 / iVal2;
03 printf("%lf\n", dVal); // = 3.3333…

Allerdings ist es nicht immer möglich, jeden beliebigen Typen in einen anderen umzuwandeln, und einige Umwandlungen können auch unsicher und fehleranfällig sein, wenn dabei Zeiger im Spiel sind. Abhängig von der Warneinstellung geben die meisten Compiler allerdings auch eine Warnmeldung aus, wenn versucht wird, etwas umzuwandeln, was entweder nicht möglich ist oder als problematisch gilt.