Bugs oder doch Features?

  • Manchmal gibt es Compiler-Fallen, die echt böse sind. OK, es ist alles irgendwo dokumentiert, aber wer hat schon die komplette Doku im Kopf?

    WWFixed ist ein cooler Datentyp, der das Berechnen mit Integerwerten (-32000 .. +32000) mit Nachkommastellen zulässt. Ich habe mich gewundert (soll heißen: stundenlang gesucht), dass

    Code
    if (sVal > MakeWWFixed(360) ) ..

    für negative sVal Werte (Datentyp sdword, - dword mit Vorzeichen) immer TRUE liefert und das Programm entsprechenden Unfug macht. Ist aber ganz logisch, weil MakeWWFixed() ein dword liefert. Das kennt keine negativen Zahlen und negative sVal-Werte haben das Bit 15 gesetzt, sind also immer größer als 360*65536 ....

    Abhilfe:

    Code
    if (wwfVal > (sdword)MakeWWFixed(360) ) ..


    Außerdem liefern die Anweisungen

    Code
    x = x +  12;
    x = x + 012;

    verschiedene Werte <X. Im zweiten Fall wird die Zahl nämlich als Oktal-Zahl aufgefasst - 12okt ist aber 14dez. Von wegen, führende Nullen kann man beliebig hinzufügen.

    Vielleicht erspare ich ja jemandem ein paar Stunden Sucharbeit.

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.