C11 draft explains the length modifier for ptrdiff_t in 7.21.6.1 7 "The fprintf function"
t
Specifies that a following d, i, o, u, x, or X conversion specifier applies to a ptrdiff_t or the corresponding unsigned integer type argument; or that a following n conversion specifier applies to a pointer to a ptrdiff_t argument.
Use "%td" as in the following: Credit: @trojanfoe
ptrdiff_t diff = b - a;
printf("diff = %td", diff);
If the compiler does not support "%td", cast to a signed type - the longer, the better. Then insure the alternative format and argument match.
// Note the cast
printf("diff = %lld", (long long) diff); // or
printf("diff = %ld", (long) diff);
Ref format specifiers