Ich habe eine Variable vom Typ size_t
und ich möchte es drucken mit printf()
. Welchen Formatspezifikator muss ich verwenden, um es portabel zu drucken?
Auf einem 32-Bit-Rechner, %u
scheint richtig zu sein. Ich habe kompiliert mit g++ -g -W -Wall -Werror -ansi -pedantic
und es gab keine Warnung. Aber wenn ich den Code auf einem 64-Bit-Rechner kompiliere, wird eine Warnung ausgegeben.
size_t x = <something>;
printf("size = %u\n", x);
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
Die Warnung verschwindet, wie erwartet, wenn ich das in %lu
.
Die Frage ist, wie kann ich den Code so schreiben, dass er sowohl auf 32- als auch auf 64-Bit-Maschinen warnfrei kompiliert werden kann?
Edit: Als Workaround könnte eine Lösung darin bestehen, die Variable in eine Ganzzahl zu "casten", die groß genug ist, sagen wir unsigned long
und drucken mit %lu
. Das würde in beiden Fällen funktionieren. Ich bin auf der Suche, ob es eine andere Idee gibt.