Tengo el siguiente programa¿Cuál es el especificador de formato para int corto sin signo?
#include <stdio.h>
int main(void)
{
unsigned short int length = 10;
printf("Enter length : ");
scanf("%u", &length);
printf("value is %u \n", length);
return 0;
}
Qué cuando se compila utilizando gcc filename.c
el aviso siguiente (en la línea scanf()
).
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
entonces remitió el C99 specification - 7.19.6 Formatted input/output functions
y no podía entender el especificador de formato correcto utilizando los modificadores de longitud (como short
, long
, etc) con unsigned
para int
tipo de datos.
¿Es %u
el especificador correcto unsigned short int
? Si es así, ¿por qué recibo la advertencia mencionada?
EDITAR: La mayoría de las veces, estaba tratando %uh
y todavía estaba dando la advertencia.
'printf ("% u \ n ", longitud (sin signo)); // 'siempre funciona, ya que la especificación C99 que lees garantiza que' sizeof (short) <= sizeof (int) '(pero las respuestas reales a esta pregunta a continuación son, por supuesto, mucho más agradables) – Philip
No hay necesidad del molde; las promociones predeterminadas se encargan de eso. –