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