Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
大小为%zu或%Iu的printf格式说明符是否正确? < C++ >使用微软Visual Studio 2010(我想使用 Prtff >代替 > p>微软的C编译器没有赶上最新的C标准。它基本上是一个C99编译器,它有C99的一些精选特征。(例如,long)。因此,有些东西不受支持也就不足为奇了(%zu出现在C99中)。_C++_C_Visual Studio 2010_Printf_Format Specifiers - Fatal编程技术网

大小为%zu或%Iu的printf格式说明符是否正确? < C++ >使用微软Visual Studio 2010(我想使用 Prtff >代替 > p>微软的C编译器没有赶上最新的C标准。它基本上是一个C99编译器,它有C99的一些精选特征。(例如,long)。因此,有些东西不受支持也就不足为奇了(%zu出现在C99中)。

大小为%zu或%Iu的printf格式说明符是否正确? < C++ >使用微软Visual Studio 2010(我想使用 Prtff >代替 > p>微软的C编译器没有赶上最新的C标准。它基本上是一个C99编译器,它有C99的一些精选特征。(例如,long)。因此,有些东西不受支持也就不足为奇了(%zu出现在C99中)。,c++,c,visual-studio-2010,printf,format-specifiers,C++,C,Visual Studio 2010,Printf,Format Specifiers,根据来自的答案,%z是C99的一个新增项。由于MSVC不支持任何更高版本的C标准,所以不支持%z也就不足为奇了。指出: 不支持hh、j、z和t长度前缀 因此不支持%zu 它还声明用于size\u t的正确前缀是I–因此您应该使用%IuMS Visual Studio在VS2013之前不支持%zuprintf说明符。从VS2013开始(例如\u MSC\u VER=1800)%zu 另一种选择是,对于早期版本的Visual Studio,如果要打印较小的值(如std容器中的元素数),只需将其转换为

根据来自的答案,
%z
是C99的一个新增项。由于MSVC不支持任何更高版本的C标准,所以不支持
%z
也就不足为奇了。

指出:

不支持
hh
j
z
t
长度前缀

因此不支持
%zu


它还声明用于
size\u t
的正确前缀是
I
–因此您应该使用
%Iu

MS Visual Studio在
VS2013
之前不支持
%zu
printf说明符。从VS2013开始(例如
\u MSC\u VER
=
1800
%zu

另一种选择是,对于早期版本的Visual Studio,如果要打印较小的值(如std容器中的元素数),只需将其转换为
int
,然后使用
%d

printf("count: %d\n", (int)str.size()); // less digital ink spent
// or:
printf("count: %u\n", (unsigned)str.size());

链接到的MSDN页面说:<代码> i、i32和i64长度修饰符前缀是微软扩展,而不是ANSI兼容的,这似乎回答了关于MS遵循标准的问题。@约翰:例如,他们的编译器称为Visual C++,自从1版本以来,与DOS时代“微软C/C++编译器”相比。.VS 2015支持C99。2013年和2015年都支持
%zu
。VS2013不支持
%zu
,只支持
%Iu
。2015年不能讲话。@JustinM.Keyes 2015不支持“C99”他们喜欢假装他们有足够的库支持来构建FFMPEG之类的东西,但是他们肯定不说实际的语言。有一天尝试指定的初始化器。@ LarsViklund:你可能想在C模式下重新检查。MSVC++ 2015不支持C++模式,但是代码< %ZU>代码>是另一回事,因为C++ 11。已获取C99库更改。
%zu
现在必须在任一模式下工作。VS 2015支持
%z
@ChuckWalbourn当前链接具有2017年的时间戳,它表示不支持%z。后续版本中是否删除了
z
支持?
%zu
肯定在VS 2015中工作。请参阅。您的链接是旧的MSDN文档CH没有被长期保存。如果你瞄准C++,我会优先使用C风格的CAST。它的主要优点是在编译时检查。VS2013实际上支持%ZU吗?不是只有VS2015才可用吗?%Z不支持,这个答案中的链接导致文档。VS2015的修订(URL中带有
vs-2015
)不是VS2013.MSVC一直关注C++一致性,而不是C,虽然这是在改变的,因为C99标准库被引用到C++ 11标准库中,CRT工作又重新开始了。代码2015 >代码>直到VS 2015才被添加。另一个主要问题是C99预处理器被宣布为C++标准的一部分,所以这项工作一直在进行中,将于年内完成。