У меня есть переменная типа 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
, и напечатать, используя %lu
. Это будет работать в обоих случаях. Я смотрю, есть ли другая идея.