正确的size_t:%zu或%Iu的printf格式说明符?

时间:2013-03-25 07:53:51

标签: c++ c visual-studio-2010 printf format-specifiers

我想使用Microsoft Visual Studio 2010在C ++中使用size_t打印出printf变量的值(我希望在此使用printf代替<<具体的代码,所以请不要回答告诉我应该使用<<代替。

根据帖子

  

Platform independent size_t Format specifiers in c?

正确的与平台无关的方法是使用%zu,但这似乎在Visual Studio中不起作用。

中的Visual Studio文档
  

http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx

告诉我必须使用%Iu(使用大写i,而不是小写l)。

Microsoft是否未遵循此处的标准?或者自C99以来标准是否已更改?或者C和C ++之间的标准是不同的(这对我来说似乎很奇怪)?

4 个答案:

答案 0 :(得分:18)

The Microsoft documentation州:

  

不支持hhjzt长度前缀。

因此不支持%zu

它还指出用于size_t的正确前缀为I - 因此您使用%Iu

答案 1 :(得分:16)

Microsoft的C编译器无法满足最新的C标准。它基本上是一个C89编译器,带有一些来自C99的精选功能(例如long long)。因此,不应该支持某些内容(%zu出现在C99中)。

答案 2 :(得分:8)

MS Visual Studio在%zu之前不支持VS2013 printf说明符。从VS2013开始(例如_MSC_VER&gt; = 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());

答案 3 :(得分:6)

根据here的答案,%z是C99的补充。由于MSVC不支持任何后来的C标准,因此不支持%z