C 为什么';是否在VS2010中使用t%zd printf格式?
下面的代码没有在VisualStudio中打印该值C 为什么';是否在VS2010中使用t%zd printf格式?,c,visual-studio,visual-studio-2010,C,Visual Studio,Visual Studio 2010,下面的代码没有在VisualStudio中打印该值 int main() { intptr_t P = 10; printf("test value is %zd",P); return 0; } 输出: test value is zd 我希望上面的代码打印出来 test value is 10 我使用intptr\u t而不是integer,以便在32位和64位体系结构中调整代码。Microsoft版本的printf中未定义z前缀。我想I前缀可能有用。请参见尽
int main() {
intptr_t P = 10;
printf("test value is %zd",P);
return 0;
}
输出:
test value is zd
我希望上面的代码打印出来
test value is 10
我使用intptr\u t而不是integer,以便在32位和64位体系结构中调整代码。Microsoft版本的
printf
中未定义z
前缀。我想I
前缀可能有用。请参见尽管C99支持z
长度说明符,但Visual Studio 2010不支持C99,而是符合缺少z
长度说明符的旧版本C。作为扩展,VS2010确实支持instead forsize\t
,但这不可移植到其他平台
我建议使用带有%llu
说明符的无符号long
;开销很小,而且可以移植到C99平台。对于可移植代码,#在printf
格式字符串中包含PRIdPTR
printf("test value is %" PRIdPTR, P);
它有一个链接,该文件将与VisualC++一起工作,并且可能与VS2010一起工作(如果微软没有添加一个ItPyth.h)。
<代码> PRIDPTR <代码>为<代码> IpTrtRt>/COD>,<代码> PrimUpTr> <代码>为<代码> uTutpRtTyt。
< P> VisualC++,VS 2013,不支持%Z。如果您希望将来的版本支持此错误,请对此错误进行表决:
要打印尺寸,您需要在VS中使用%Iu,在gcc中使用%zu请使用一致的缩进样式。这将有助于我们和您阅读您的代码。@bdonlan和Bart,谢谢您的建议,对此我深表歉意:)MS文档不允许将%llu
作为选项,仅允许%lld
。您还希望将参数强制转换为适当的大小。@Mark Ransom希望对未签名的整数也使用uintptr\t。在这种情况下,您对我有什么建议?因为inttypes.h在VS2012中仍然不存在,所以我相信对它的支持已添加到VS2015中。