printf-Formatstring für size_t - Variable für 32-Bit vs. 64-Bit



  • Die Größe einer Variable vom Typ size_t compilerabhängig:
    32 - Bit für 32 - Bit Compiler und
    64 - Bit für 64 - Bit Compiler.

    Der printf-Formatstring ist für
    32-Bit Variablen %d und für
    64 Bit Variablen %I64d.

    Wie kann ich mit einer printf-Anweisung eine size_t Variable in einem C-Programm ausgeben, die sowohl für 32-Bit, als für 64-Bit Compiler funktoniert?

    Im voraus besten Dank für die Antworten.


  • Mod

    %zd. Oder %zx usw., je nach gewünschtem Format, Hauptsache z als Längenangabe.

    PS: Das ist C99, aber auch so gut wie alle C89-Compiler verstehen das. Wenn es unbedingt absolut streng C89 konform sein muss, dann bleibt noch ein Cast nach unsigned long und diesen dann ausgeben.



  • Du kannst dir aber auch einen Header (ähnlich inttypes.h ) machen.

    Der Compiler stellt Makros zur verfügung, an denen man erkennen kann, welches Bitgröße gerade compiliert wird.



  • @DirkB: Hört sich interessant an, könntest du das näher beschreiben?



  • In etwa so:

    #if defined _WIN32
    #define PRIdSIZE "d"
    #define PRIuSIZE "u"
    #define PRIxSIZE "x"
    #elif defined _WIN64
    #define PRIdSIZE "I64d"
    #define PRIuSIZE "I64u"
    #define PRIxSIZE "I64x"
    #else
    /* #error "unknown Compiler Target Specifier" */
    #define PRIdSIZE "zd" 
    #define PRIuSIZE "zu"
    #define PRIxSIZE "zx"
    #endif
    
    printf("%"PRIdSIZE"\n", size_t_variable);
    

    ^Da können jetzt noch Fehler drin sein^


Anmelden zum Antworten