programing

부호 없는 short int 형식 지정자는 무엇입니까?

coolbiz 2022. 7. 8. 22:20
반응형

부호 없는 short int 형식 지정자는 무엇입니까?

다음과 같은 프로그램이 있습니다.

#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위해서intdata type 입니다.

%u올바른 지정자unsigned short int만약 그렇다면 왜 위에 언급된 경고를 받게 되는 거죠?

편집: 대부분의 경우, 저는%uh그리고 여전히 경고를 주고 있었다.

를 사용해 보세요."%h"수식자:

scanf("%hu", &length);
        ^

ISO/IEC 9899:201x - 7.21.6.1-7

다음 d, i, o, u, x, X 또는n 변환 지정자가 short 또는 unsigned short 유형 포인터를 가진 인수에 적용되도록 지정합니다.

위해서scanf, 를 사용해야 합니다.%hu포인터를 전달하고 있기 때문에unsigned short.위해서printf에 합격하는 것은 불가능하다.unsigned short디폴트 프로모션에 의해 (프로모션으로 승격됩니다.int또는unsigned int유무에 따라int적어도 같은 수의 값 비트를 가지다unsigned short그렇든 아니든)그렇게%d또는%u괜찮아요.자유롭게 사용하실 수 있습니다.%hu그래도 괜찮으시다면요

Linux 매뉴얼 페이지에서 다음 작업을 수행합니다.

h 다음 정수 변환은 short int 인수 또는 unsigned short int 인수 또는 fol에 대응합니다.lowing n 변환은 짧은 int 인수에 대한 포인터에 해당합니다.

따라서 부호 없는 짧은 정수를 인쇄하려면 형식 문자열은 다음과 같아야 합니다."%hu".

여기 좋은 테이블이 있습니다printf지정자.그러니까...%hu위해서unsigned short int.

Wikipedia "C data type"에도 링크합니다.

언급URL : https://stackoverflow.com/questions/8699812/what-is-the-format-specifier-for-unsigned-short-int

반응형