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);
Ссылка Спецификаторы формата