c - 표현 - 실수 상수
unsigned short int의 형식 지정자는 무엇입니까? (3)
다음은 printf
지정자에 적합한 테이블 입니다. unsigned short int
%hu
가되어야합니다.
그리고 Wikipedia "C data types" 에도 링크하십시오 .
나는 다음과 같은 프로그램을 가지고있다.
#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
을 참조했습니다. C99 specification - 7.19.6 Formatted input/output functions
가 int
형식의 데이터 형식에 unsigned
int
와 함께 길이 수정 자 ( short
, long
등)를 사용할 때 올바른 형식 지정자를 이해하지 못했습니다.
%u
는 (는) 올바른 지정자 %u
unsigned short int
입니까? 그렇다면 왜 내가 위에서 언급 한 경고를 받고 있습니까?!
편집 : 대부분의 시간, 나는 노력하고 있었으니 그것은 여전히 경고를주고 있었다.
리눅스 매뉴얼 페이지에서 :
h A following integer conversion corresponds to a short int or unsigned short int argument, or a fol‐ lowing n conversion corresponds to a pointer to a short int argument.
따라서 부호없는 짧은 정수를 인쇄하려면 서식 문자열이 "%hu"
이어야합니다.
scanf
경우 unsigned short
대한 포인터를 전달하므로 %hu
를 사용해야합니다. printf
, 기본 프로모션으로 인해 unsigned short
를 전달하는 것은 불가능합니다 ( int
가 int
또는 unsigned int
로 승격 됨). 따라서 %d
또는 %u
는 유효합니다. 그래도 원하는 경우 %hu
자유롭게 사용할 수 있습니다.