Programmiersprache C/C++

Header-Dateien - Effekte

Beispiel:
  #include 

  int main(void)
  {
    double x;

    for ( x=0.; x<=1.; x+=0.2 )
      printf("%lf %lf\n", x, sqrt(x));

    return 0;
  }
Die Ausführung des Programms liefert folgende Ergebnisse:
  0.000000 4726776437634326600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
  0.200000 1.117188
  0.400000 0.789063
  0.600000 0.644531
  0.800000 0.558594
  1.000000 0.499023
Die erste Ausgabezeile signalisiert hier sofort, daß das Programm nicht die gewünschten Resultate liefert. Die nachfolgenden Zeilen sehen bei grober Sicht "vernüftig" aus, aber auch sie sind falsch !

Ursache für die überraschenden Ergebnisse ist eine fehlende Anweisung:

  #include <math.h>
sqrt liefert Werte vom Typ double. Da das aufrufende Programm jedoch keine Kenntnis des Prototyps von double erhält, nimmt es den Ergebnistyp int an !

Die beiden folgenden Programmsegmente bilden jeweils die Situation nach, die durch den fehlenden Prototyp entsteht.

Variante 1:

  double x;
  int i;

  for ( x=0.; x<=1.; x+=0.2 ) {
    i = sqrt(x);
    printf("%lf %lf\n", x, *(double*)&i);
  }
Variante 2:
  double x;
  union {
    int i;
    double d;
  } u;

  for ( x=0.; x<=1.; x+=0.2 ) {
    u.i = sqrt(x);
    printf("%lf %lf\n", x, u.d);
  }

Zurück zum Menü
Zurück zur vorigen Seite Weiter zur nächsten Seite

P. Böhme, 11.02.1996