Вы можете использовать z
для size_t и t
для ptrdiff_t, как в
printf("%zu %zd", size, ptrdiff);
Но моя страница руководства говорит, что в какой-то более старой библиотеке использовался символ, отличный от z
, и не рекомендует использовать его. Тем не менее, он стандартизирован (по стандарту C99). Для тех intmax_t
и int8_t
из stdint.h
и т. Д. Есть макросы, которые вы можете использовать, как сказал другой ответ:
printf("value: %" PRId32, some_int32_t);
printf("value: %" PRIu16, some_uint16_t);
Они перечислены на странице руководства inttypes.h
.
Лично я просто приведу значения к unsigned long
или long
, как рекомендует другой ответ. Если вы используете C99, то вы можете (и, конечно, должны) привести к unsigned long long
или long long
и использовать форматы %llu
или %lld
соответственно.