У мене є така програма
#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
? Якщо так, чому я отримую вищезазначене попередження ?!
EDIT: Більшість випадків я намагався, %uh
і це все ще дало попередження.
printf("%u\n", (unsigned int)length); //
завжди працює, оскільки специфікація C99, яку ви читаєте, гарантує цеsizeof(short) <= sizeof(int)
(але фактичні відповіді на це питання, звичайно, набагато приємніші)