C 为什么';是否在VS2010中使用t%zd printf格式?

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前缀可能有用。请参见尽

下面的代码没有在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
前缀可能有用。请参见尽管C99支持
z
长度说明符,但Visual Studio 2010不支持C99,而是符合缺少
z
长度说明符的旧版本C。作为扩展,VS2010确实支持instead for
size\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中。