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 functionsint 형식의 데이터 형식에 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 를 전달하는 것은 불가능합니다 ( intint 또는 unsigned int 로 승격 됨). 따라서 %d 또는 %u 는 유효합니다. 그래도 원하는 경우 %hu 자유롭게 사용할 수 있습니다.







scanf