int64_t und printf("%ld", ..)



  • Hallo,

    ich komme irgendwie mit int64_t nicht so ganz klar. Warum ist der folgende Ausschnitt nicht plattformunabhängig?

    int64_t i = 23;
    printf("%ld", i);
    

    Liegt das am Modifier %ld?

    Sehe ich es richtig, dass ich mit %lld die Plattformunabhängigkeit erreichen könnte, weil long long int auf manchen Plattformen int64_t entspricht und long int auch nur 32 Bit haben könnte?

    Ich hoffe, mir kann hier jemand zur Erleuchtung verhelfen 🙂

    MfG
    int64_t


  • Mod

    Wenn du es wirklich narrensicher plattformunabhängig haben möchtest:

    printf("%" PRId64 , i);
    


  • Wäre es mit %lld nicht auf jeder Plattform das gleiche? Wo würde es nicht klappen?

    Wenn ich das richtig verstanden habe, hat long long int immer 64 Bit und int64_t hat auch immer 64 bit, wohingegen long int auch auf manchen Plattformen nur 32 Bit haben könnte.



  • Also wenn ich das hier (http://opensource.apple.com/source/gcc/gcc-932.1/inttypes.h) richtig sehe, dann wird PRId64 sowieso zu lld, weil bei Apple (jetzt als Beispiel) lld eine Zahl mit 64 Bit ausgeben kann.

    Das heißt also, dass ich einfach PRId64 verwende und dann die inttypes.h inkludiere. Beim Kompilieren nimmt der Kompiler dann automatisch den richtigen Modifier.

    Sehe ich das richtig?


Log in to reply