型の変数がありsize_t
、 を使用してそれを印刷したいと考えていますprintf()
。移植可能な形式で印刷するには、どのような書式指定子を使用すればよいでしょうか?
32 ビット マシンでは、%u
正しいようです。 でコンパイルしましたg++ -g -W -Wall -Werror -ansi -pedantic
が、警告は表示されませんでした。しかし、そのコードを 64 ビット マシンでコンパイルすると、警告が表示されます。
size_t x = <something>;
printf("size = %u\n", x);
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
これを に変更すると、予想どおり警告は消えます%lu
。
問題は、32 ビット マシンと 64 ビット マシンの両方で警告なしでコンパイルされるコードをどのように記述するかということです。
unsigned long
編集: 回避策として、変数を のように十分な大きさの整数に「キャスト」し、 を使用して印刷することが1 つの答えになると思います%lu
。これはどちらの場合も機能します。他に何かアイデアがないか探しています。
ベストアンサー1
修飾子を使用しますz
:
size_t x = ...;
ssize_t y = ...;
printf("%zu\n", x); // prints as unsigned decimal
printf("%zx\n", x); // prints as hex
printf("%zd\n", y); // prints as signed decimal