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.cder 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 functionsund könnte die richtigen Formatspezifizierer nicht verstehen , wenn die Länge Modifikatoren (wie short, longusw.) mit unsignedfür intDatentyp.
Ist %uder richtige Bezeichner unsigned short int? Wenn ja, warum bekomme ich die oben genannte Warnung?!
EDIT: Die meiste Zeit habe ich es versucht %uhund 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)