1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Microsoft mag keine 64-bit typedefs?

    • Frage
  • Sysmaniac
  • 10. März 2006 um 08:16
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Sysmaniac
    Punkte
    301
    Beiträge
    53
    • 10. März 2006 um 08:16
    • #1

    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.

    Code
    typedef struct{
      unsigned __int64 top;
      unsigned __int64 bot;
    } large_type;
    
    
    int main(int argc, char **argv){
    
    	large_type bad = {2,3};
    	printf( "bad is: %llu, %llu\n", bad.top, bad.bot);
    }
    Alles anzeigen

    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

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 10. März 2006 um 12:12
    • #2

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

  • kubuntu
    Punkte
    352
    Beiträge
    65
    • 10. März 2006 um 23:49
    • #3

    Unter Visual Studio 2005 scheint der Fehler gefixt zu sein.

  • Sysmaniac
    Punkte
    301
    Beiträge
    53
    • 14. März 2006 um 21:39
    • #4

    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

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 15. März 2006 um 01:30
    • #5

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

  • Sysmaniac
    Punkte
    301
    Beiträge
    53
    • 28. März 2006 um 22:26
    • #6

    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

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum