Navigation

2.8.1 Implizite Typkonvertierung

Teilausdrücke, die unterschiedliche Typen besitzen, werden immer in den jeweils höheren Typ konvertiert (z.B. short -> int -> long oder int -> double).

Einige Problemfälle bei Wertzuweisungen:

Die Vorzeichenausdehnung bei Konvertierung von char nach int ist compilerabhängig.

Bei Konvertierung in den Typ unsigned wird in der Regel die Bitfolge des Ausgangswertes als vorzeichenloser Integerwert interpretiert.

Bei Operationen mit Zeigern erfolgt immer eine Konvertierung in Einheiten des zugeordneten Typs, auf den der Zeiger verweist.

Die Zuweisung von Integerwerten an Zeiger (und umgekehrt) erfolgt ohne Umwandlung und ist mit Ausnahme des Wertes NULL nicht portabel und nicht unkritisch.

Bei Aufruf von Funktionen treten folgende implizite Konvertierungen auf, wenn keine Prototypvereinbarung erfolgte:

Der Compiler kann den Typ der Argumente nur bei einer Prototypvereinbarung überprüfen und gegebenenfalls in den Typ der Parameter konvertieren, sonst erfolgt keine Überprüfung.

BEISPIELE/b281.c: 

#include <stdio.h>

main()                          /* Typ-Konvertierung */
{  
    double d,x; 
    float f; 
    long l; 
    int i,y; 
    char c;

    i = l = f = d = 100/3;
    printf("i = %d, l = %ld, f = %f, d = %f\n",i,l,f,d);
    d = i = l = f = 100000/3;
    printf("i = %d, l = %ld, f = %f, d = %f\n",i,l,f,d);
    d=3.2; 
    i=2; 
    x = (y=d+i)/2;
    printf("y = %d ; x = %f\n", y, x);
    c = '2'; 
    printf("%d \n", c);
}

Navigation