sintaxis lenguaje funcion ejemplos dev c++ c visual-studio-2010 printf format-specifiers

c++ - lenguaje - Corrija el especificador de formato printf para size_t:% zu o% Iu?



printf(% d (4)

Quiero imprimir el valor de una variable size_t usando printf en C ++ usando Microsoft Visual Studio 2010 (quiero usar printf lugar de << en este fragmento de código específico, así que por favor no me digan que debería usar << lugar) .

Según la publicación

Plataforma independiente size_t Formatos de formato en c?

la forma correcta de plataforma independiente es usar %zu , pero esto no parece funcionar en Visual Studio. La documentación de Visual Studio en

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

me dice que debo usar %Iu (usando mayúsculas i , no minúsculas l ).

¿Microsoft no está siguiendo los estándares aquí? ¿O ha cambiado el estándar desde C99? ¿O es el estándar diferente entre C y C ++ (que me parece muy extraño)?



El compilador de C de Microsoft no alcanza los últimos estándares de C. Básicamente es un compilador C89 con algunas características escogidas por C99 (por ejemplo, long long ). Por lo tanto, no debe sorprender que algo no sea compatible ( %zu apareció en C99).


MS Visual Studio no VS2013 especificador %zu printf antes de VS2013 . A partir de VS2013 (p _MSC_VER Ej. _MSC_VER > = 1800 ) %zu está disponible.

Como alternativa, para las versiones anteriores de Visual Studio, si está imprimiendo valores pequeños (como el número de elementos de los contenedores estándar), puede simplemente convertir a un int y usar %d :

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


Según la respuesta de here , %z es una adición de C99. Como MSVC no es compatible con ninguno de los estándares C posteriores, no sorprende que %z no sea compatible.