Tengo una variable del tipo size_t
, y quiero imprimir usando printf()
. ¿Qué especificador de formato utilizo para imprimirlo de forma portátil?¿Cómo se puede imprimir una variable size_t de forma portátil utilizando la familia printf?
En la máquina de 32 bits, %u
parece correcto. Recopilé con g ++ -g -W -Wall -Werror -ansi -pedantic, y no hubo ninguna advertencia. Pero cuando compilo ese código en una máquina de 64 bits, produce una advertencia.
size_t x = <something>;
printf("size = %u\n", x);
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
La advertencia se va, como era de esperar, si cambio de que a %lu
.
La pregunta es, ¿cómo puedo escribir el código, para que compile la advertencia gratuita en ambas máquinas de 32 y 64 bits?
Editar: Supongo que una respuesta podría ser "lanzar" la variable en un unsigned long
, e imprimir usando %lu
. Eso funcionaría en ambos casos. Estoy buscando si hay alguna otra idea.
fundición a 'long' sin signo es la mejor opción si su aplicación libc no admite el modificador' z'; el estándar C99 recomienda 'size_t' no tener un rango de conversión entero mayor que' long', por lo que es razonablemente seguro – Christoph
posible duplicado de [Platform independent size_t Especificadores de formato en c?] (http://stackoverflow.com/questions/2125845/platform-independent-size-t-format-specifiers-in-c/22114959#22114959) – maxschlepzig
[¿Cuál es la forma correcta de usar printf para imprimir un size_t?] (http://stackoverflow.com/q/940087/995714) –