Microsoft mag keine 64-bit typedefs?

  • Hi allerseits,

    Waehrend ich mit MS Visual Studio an C-Code gearbeitet habe bin ich ueber einen merkwuerdigen Fehler mit 64 bit integers gestolpert:

    Folgendes Codefragment liefert statt der erwarteten Ausgabe "2,3" den Unsinn "2,0" zurueck.

    Wenn ich 32 bit integers statt 64 verwende ist alles okay, auch einzelne 64 bit integers (ohne typedef) funktionieren problemlos.

    gcc macht keine Probleme mit sowas, aber nachdem es mich einen ganzen Tag gekostet hat diesen Fehler zu finden ist es halt etwas unbefriedigend jetzt einfach den Kompiler zu wechseln ohne zu wissen was der Hintergrund ist.

    Habt ihr irgendeine Ahnung, woran das liegen koennte?

    lg
    Sys

    Any sufficiently advanced technology is indistinguishable from magic.
    Arthur C. Clarke

  • Bug reports zum Visual C++-Compiler solltest du eher an Microsoft schicken als ans Informatik-Forum...

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Es duerfte sich dabei um einen Bug in der Funktion printf handeln, das anscheinend nicht mehr als ein 64-bit Argument vertraegt.

    Wen man die beiden integers einzeln ausgibt funktionierts:

    Code
    printf( "bad.top is: %llu, ", bad.top);
    printf( "bad.bot is: %llu\n", bad.bot);

    Kleine Ursache, grosse Wirkung! :thumb:

    lg
    Sys

    Any sufficiently advanced technology is indistinguishable from magic.
    Arthur C. Clarke

  • Könnte auch ein Problem mit varargs und 64bit-Typen sein.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Das Problem sind unterschiedliche Format specifier fuer 64-bit Integers.

    gcc erwartet:

    Code
    printf( "myInt is: %[B]llu[/B]", myInt);

    der MS Visual Studio compiler will:

    Code
    printf( "myInt is: %[B]I64u[/B]", myInt);

    Das Gemeine daran ist, dass Visual Studio %llu akzeptiert, es aber offenbar wie %lu (also 32-bit behandelt). Bei den kleinen Werten die ich zum Testen verwendet habe faellt das nicht auf, solange ich keine zweites Argument uebergeben habe. Dann wurden statt dem zweiten Argument die oberen 32-bit des ersten Arguments vom Stack geholt und die waren eben Null.

    Kleinigkeit wenn man's weiss! :)

    lg
    Sys

    Any sufficiently advanced technology is indistinguishable from magic.
    Arthur C. Clarke

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!