programing

C에서 'a'가 int인데 왜 (char)의 크기가 1입니까?

bestprogram 2023. 6. 6. 10:24

C에서 'a'가 int인데 왜 (char)의 크기가 1입니까?

나는 노력했다.

printf("%d, %d\n", sizeof(char), sizeof('c'));

1, 4를 출력으로 받았습니다.캐릭터의 크기가 1이면, 왜?'c'4개 주세요?정수라서 그런 것 같아요.그래서 내가 할 때char ch = 'c';후드 아래에서 char 변수에 할당될 때 4바이트 값에서 1바이트 값으로 암시적 변환이 발생합니까?

C에서 'a'는 정수 상수(!?)이므로 아키텍처에 대해 4가 맞습니다.할당을 위해 암묵적으로 char로 변환됩니다. size of (char)는 정의상 항상 1입니다.표준에는 1단위가 무엇인지는 나와 있지 않지만, 종종 바이트입니다.

C 표준은 'a'와 같은 문자 리터럴이 char 유형이 아닌 int 유형이라고 말합니다.따라서 (플랫폼에서) == 4 크기입니다.자세한 내용은 이 질문을 참조하십시오.

그것은 정상적인 행동입니다.sizeof연산자(위키백과 참조):

  • 데이터 유형의 경우,sizeof데이터 유형의 크기를 반환합니다.위해서char1점입니다.
  • 표현하자면,sizeof변수 또는 식 유형의 크기를 반환합니다.문자 리터럴을 다음과 같이 입력합니다.int4점입니다.

이 내용은 ISO C11에서 다룹니다.6.4.4.4 Character constants이전의 기준과 크게 달라지지는 않았지만요.즉, 단락에 다음과 같이 기술합니다./10:

정수 문자 상수에 int 형식이 있습니다.단일 바이트 실행 문자에 매핑되는 단일 문자를 포함하는 정수 문자 상수 값은 정수로 해석되는 매핑 문자 표현의 수치입니다.

ANSIC 표준에 따르면,char로 승진합니다.int정수가 사용되는 컨텍스트에서 정수 형식 지정자를 사용했습니다.printf따라서 다른 값.char는 일반적으로 1바이트이지만 런타임 및 컴파일러를 기반으로 정의된 구현입니다.

언급URL : https://stackoverflow.com/questions/2252033/in-c-why-is-sizeofchar-1-when-a-is-an-int