次のプログラムがあります
#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)(ただし、以下のこの質問への実際の回答はもちろんはるかに優れています)