2015-01-05 4 views
3

C 및 C++의 모든 리터럴이 특정 형식 정보를 얻는 것을 알고 있습니다. 이 작은 프로그램을 C로 작성하고 Visual Studio 2012에서이 파일을 컴파일했습니다. 소스 파일의 이름은 'main.c'입니다.C에서 문자 리터럴의 크기가 C++과 다른 이유

#include <stdio.h> 
int main() 
{ 
    printf("sizeof(char) = %d\n",sizeof(char)); 
    printf("sizeof('i') = %d",sizeof('i')); 
    getchar(); 
    return 0; 
} 

는 출력 :

sizeof(char) = 1 
sizeof('i') = 4 

나는 문자의 크기가없는 1 바이트라고 생각해. 원본 파일의 이름을 'main.cpp'로 변경했으며 이전에 예상했던대로 sizeof ('a')가 1을 반환했습니다. 따라서 언어별로 차이가 있어야합니다. C 4 Byte의 문자 크기가 1이 아닌 이유는 무엇입니까?

+4

* Q : C에서 char의 크기가 C++과 다른 이유는 무엇입니까? * A : 그렇지 않습니다. –

답변

5

C에서 'i'은 이전 버전과의 호환성을 위해 유형이 int입니다. 따라서 sizeof('i')은 선택한 컴파일 플랫폼에서 int의 크기를 표시합니다.

C++에서는 오버로드로 인해 놀라운 유형의 표현을 피하는 것이 더 시급하므로 하위 호환성을 깨고 'i' 유형을 char으로 지정하기로 결정했습니다.

10

C++에서 문자 리터럴의 유형은 char이고 C에서는 int입니다. 물론 sizeof(char) 자체는 정의에 따라 두 언어 모두에서 1입니다.

+0

* C에서 문자 리터럴의 크기가 C++과 다른 이유는 무엇입니까? * C++에서는 문자 리터럴 유형이 char이고 C에서는 int *입니다. 기본 OP 질문은 같아요 : 왜 문자 리터럴은 C에서 C와 같은'char'가 아니라 C에서'int'입니다. – ouah

+0

@ouah : 나는 그것에 동의 할 수 없다. 질문은 "왜 문자의 크기가 ...."라고 오해합니다. 문자 리터럴은'char' 유형입니다. 왜 그런 일이 일어날지를 물어볼 수있는 위치에 있기 전에이를 정리해야합니다. – Jon