C:printf中的ptrdiff_t应该使用哪个字符?

printf ptrdiff_t应该使用哪个字符?

C标准是否清楚地解释了如何在printf打印ptrdiff_t ? 我还没找到任何人。

 int a = 1; int b = 2; int* pa = &a; int* pb = &b; ptrdiff_t diff = b - a; printf("diff = %?", diff); // % what? 

这是%td 。 看到这里 。

C11草案解释了7.21.6.1“ fprintf函数”中ptrdiff_t的长度修饰符

t
指定以下diouxX转换说明符适用于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); 

参考格式说明符

使用%td ,如果您的编译器不支持它,您应该尝试%ld (也将输入转换为long )。