J'ai le programme suivant
#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;
}
Qui, une fois compilé en utilisant, a gcc filename.c
émis l'avertissement suivant (dans la scanf()
ligne).
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
Mentionnant la C99 specification - 7.19.6 Formatted input/output functions
et ne pouvait pas comprendre le spécificateur de format correct lorsque vous utilisez les modificateurs de longueur (comme short
, long
, etc.) avec unsigned
pour le int
type de données.
Le %u
spécificateur est -il correct unsigned short int
? Si oui, pourquoi est-ce que je reçois l'avertissement mentionné ci-dessus?!
EDIT: La plupart du temps, j'essayais %uh
et cela donnait toujours l'avertissement.
printf("%u\n", (unsigned int)length); //
fonctionne toujours, puisque la spécification C99 que vous lisez garantit quesizeof(short) <= sizeof(int)
(mais les réponses réelles à cette question ci-dessous sont bien sûr beaucoup plus agréables)