Spécificateur de format correct printf pour la taille t: %zu ou %Iu?
je veux imprimer la valeur d'une variable size_t
en utilisant printf
en c/" class="blnk">C++ en utilisant Microsoft Visual Studio 2010 (je veux utiliser printf
au lieu de <<
dans ce morceau de code spécifique, donc s'il vous plaît pas de réponses me disant que je devrais utiliser <<
à la place).
selon le post
spécificateurs de Format size_t indépendants de la plateforme en c?
la bonne façon d'utiliser %zu
est indépendante de la plate-forme , mais cela ne semble pas fonctionner dans Visual Studio. La documentation de Visual Studio au
http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx
me dit que je dois utiliser %Iu
(en majuscules i
, pas en minuscules l
).
est Microsoft ne suit pas le les normes ici? Ou a la norme changé depuis C99? Ou la norme est-elle différente entre C et c++ (ce qui me semble très étrange)?
4 réponses
MS Visual Studio ne prend pas en charge %zu
printf spécificateur avant VS2013
. À partir de VS2013 (e.g. _MSC_VER
>= 1800
) %zu
est disponible.
comme alternative, pour les versions précédentes de Visual Studio si vous imprimez de petites valeurs (comme le nombre d'éléments des conteneurs std), Vous pouvez simplement mouler dans un int
et utiliser %d
:
printf("count: %d\n", (int)str.size()); // less digital ink spent
// or:
printf("count: %u\n", (unsigned)str.size());
à Partir de La documentation de microsoft
les préfixes de longueur hh, j, z et t ne sont pas supportés.
il indique que le préfixe correct à utiliser pour size_t
est I-donc vous devez utiliser %Iu
le compilateur C de Microsoft ne rattrape pas les dernières normes C. Il s'agit essentiellement d'un compilateur C89 avec quelques fonctionnalités de C99 (par exemple long long
). Il n'est donc pas surprenant que quelque chose ne soit pas supporté ( %zu
est apparu en C99).