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 functions
và 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 unsigned
cho int
kiểu dữ liệu.
Là %u
chỉ đị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 %uh
và 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)