Подтвердить что ты не робот

C: Какой символ следует использовать для ptrdiff_t в printf?

Какой символ следует использовать для 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?
4b9b3361

Ответ 2

Проект C11 объясняет модификатор длины для ptrdiff_t в 7.21.6.1 7 "Функция fprintf"

t
Указывает, что следующие d, i, o, u, x или x спецификатор преобразования применяются к ptrdiff_t или соответствующему аргументу типа без знака; или что следующий указатель преобразования n применяется к указателю на аргумент ptrdiff_t.

Используйте "%td", как показано ниже: Кредит: @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);

Ref спецификаторы формата

Ответ 3

Используйте %td, и если ваш компилятор его не поддерживает, попробуйте %ld (также введите вход в long).