Ich habe das folgende Programm
#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;
}
Was beim Kompilieren mit gcc filename.c
der folgenden Warnung ausgegeben wurde (in der scanf()
Zeile).
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
Ich verweisen dann die C99 specification - 7.19.6 Formatted input/output functions
und könnte die richtigen Formatspezifizierer nicht verstehen , wenn die Länge Modifikatoren (wie short
, long
usw.) mit unsigned
für int
Datentyp.
Ist %u
der richtige Bezeichner unsigned short int
? Wenn ja, warum bekomme ich die oben genannte Warnung?!
EDIT: Die meiste Zeit habe ich es versucht %uh
und es gab immer noch die Warnung.
printf("%u\n", (unsigned int)length); //
funktioniert immer, da die von Ihnen gelesene C99-Spezifikation dies garantiertsizeof(short) <= sizeof(int)
(aber die tatsächlichen Antworten auf diese Frage unten sind natürlich viel besser)