Tôi có chương trình sau
#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;
}
Mà khi biên dịch sử dụng gcc filename.cđã đưa ra cảnh báo sau (trong scanf()dòng).
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
Sau đó tôi gọi các C99 specification - 7.19.6 Formatted input/output functionsvà không thể hiểu được format specifier chính xác khi sử dụng các từ bổ nghĩa chiều dài (như short, long, vv) với unsignedcho intkiểu dữ liệu.
Là %uchỉ định chính xác unsigned short int? Nếu vậy tại sao tôi nhận được cảnh báo nêu trên?!
EDIT: Hầu hết thời gian, tôi đã cố gắng %uhvà nó vẫn đưa ra cảnh báo.
printf("%u\n", (unsigned int)length); //luôn luôn hoạt động, vì thông số kỹ thuật C99 mà bạn đọc đảm bảo rằngsizeof(short) <= sizeof(int)(nhưng câu trả lời thực sự cho câu hỏi dưới đây dĩ nhiên đẹp hơn nhiều)