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, lorsqu'il est compilé avec gcc filename.c
a émis l'avertissement suivant (dans le scanf()
ligne).
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
J'ai ensuite renvoyé le C99 specification - 7.19.6 Formatted input/output functions
et ne pouvait pas comprendre le spécificateur de format correct lors de l'utilisation des modificateurs de longueur (tels que short
, long
etc.) avec unsigned
pour int
type de données.
Est %u
le spécificateur 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 il donnait toujours l'alerte.
2 votes
printf("%u\n", (unsigned int)length); //
fonctionne toujours, puisque la spécification C99 que vous avez lue garantit quesizeof(short) <= sizeof(int)
(mais les réponses réelles à cette question ci-dessous sont bien sûr beaucoup plus agréables)1 votes
Pas besoin du casting, les promotions par défaut s'en chargent.