Какой символ следует использовать для ptrdiff_t
в printf
?
Ясно ли стандарт C объясняет, как напечатать ptrdiff_t
в printf
? Я никого не нашел.
int a = 1;
int b = 2;
int* pa = &a;
int* pb = &b;
ptrdiff_t diff = b - a;
printf("diff = %?", diff); // % what?
В проекте C11 поясняется модификатор длины для ptrdiff_t
в 7.21.6.1 7 «Функция fprintf
»
t
Указывает, что следующееd
Спецификатор преобразованияi
,o
,u
,x
илиX
применяется кptrdiff_t
или соответствующему аргументу целочисленного типа без знака; или что следующий спецификатор преобразованияn
применяется к указателю на аргументptrdiff_t
.
Используйте "%td"
, как показано ниже: Credit: @trojanfoe
ptrdiff_t diff = b - a;
printf("diff = %td", diff);
Если компилятор не поддерживает "%td"
, приведенный к подписанному типу - чем дольше, тем лучше. Затем убедитесь, что альтернативный формат и аргумент совпадают.
// Note the cast
printf("diff = %lld", (long long) diff); // or
printf("diff = %ld", (long) diff);
Ссылка Спецификаторы формата