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.
-
%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^