Microsoft Visual Studio 2010を使用してC++でprintf
を使用してsize_t
変数の値を出力したい(この特定の<<
の代わりにprintf
を使用したいコードの一部ですので、代わりに<<
を使用する必要があることを教えてください。
投稿によると
プラットフォームに依存しない正しい方法は%zu
を使用することですが、これはVisual Studioでは機能しないようです。 Visual Studioのドキュメント
http://msdn.Microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx
%Iu
(小文字のi
ではなく大文字のl
を使用)を使用する必要があることを教えてくれます。
Microsoftはここの標準に従っていませんか?または、C99以降に規格が変更されましたか?または、CとC++で標準が異なりますか(これは非常に奇妙に思えます)。
MS Visual Studioは、%zu
以前のVS2013
printf指定子をサポートしていませんでした。 VS2013以降(例:_MSC_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());
Microsoftのドキュメント 状態:
hh
、j
、z
、およびt
の長さのプレフィックスはサポートされていません。
したがって、%zu
はサポートされていません。
また、size_t
に使用する正しいプレフィックスはI
であるため、%Iu
を使用します。
MicrosoftのCコンパイラは、最新のC標準に追いつきません。基本的には、C99の一部の厳選された機能を備えたC89コンパイラです(例:long long
)。そのため、何かがサポートされていないことに驚きはないはずです(%zu
はC99に登場しました)。
here 、%z
はC99の追加です。 MSVCは後のC標準をサポートしていないため、%z
はサポートされていません。