У меня есть следующая программа
#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;
}
Которая при компиляции с использованием gcc filename.cвыдала следующее предупреждение (в scanf()строке).
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
Затем я сослался на C99 specification - 7.19.6 Formatted input/output functionsи не смог понять правильный спецификатор формата при использовании модификаторов длины (например short, longи т. Д.) С unsignedдля intтипа данных.
Является ли %uправильный спецификатор unsigned short int? Если да, то почему я получаю вышеупомянутое предупреждение ?!
РЕДАКТИРОВАТЬ: Большую часть времени я пытался, %uhи он все еще давал предупреждение.
printf("%u\n", (unsigned int)length); //всегда работает, поскольку спецификация C99, которую вы читаете, гарантирует этоsizeof(short) <= sizeof(int)(но фактические ответы на этот вопрос ниже, конечно, намного лучше)