Ho il seguente programma
#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;
}
Che una volta compilato utilizzando ha gcc filename.c
emesso il seguente avviso (nella scanf()
riga).
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
Ho poi fatto riferimento la C99 specification - 7.19.6 Formatted input/output functions
e non riuscivo a capire l'identificatore di formato corretto quando si utilizza i modificatori di lunghezza (come short
, long
, ecc) con unsigned
per int
il tipo di dati.
%u
Lo specificatore è corretto unsigned short int
? In caso affermativo, perché ricevo l'avviso di cui sopra ?!
EDIT: Il più delle volte, ci stavo provando %uh
e continuava a dare l'avvertimento.
printf("%u\n", (unsigned int)length); //
funziona sempre, poiché le specifiche C99 che leggi garantiscono chesizeof(short) <= sizeof(int)
(ma le risposte effettive a questa domanda qui sotto sono ovviamente molto più belle)