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
指定以下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);
参考格式说明符
使用%td
,如果您的编译器不支持它,您应该尝试%ld
(也将输入转换为long
)。