C와 C++ 문자 상수의 핵심 차이
C++에서 문자 상수(character constant)의 데이터 타입은 char입니다. 반면 C 언어에서 문자 상수는 int(정수형)으로 취급됩니다. 이 차이 때문에 C에서는 sizeof('a')가 32비트 아키텍처 기준으로 4를 반환하며, CHAR_BIT는 8입니다. 흥미롭게도 sizeof(char)은 C와 C++ 두 언어 모두에서 1바이트로 동일합니다.
즉, 같은 표현식이라도 어떤 언어로 컴파일하느냐에 따라 전혀 다른 결과가 나올 수 있습니다. 아래 예제를 통해 직접 확인해 보겠습니다.
C 예제 코드
#include<stdio.h>
main() {
printf("%d", sizeof('a'));
}실행 결과
4
C++ 예제 코드
#include<iostream>
using namespace std;
main() {
cout << sizeof('a');
}실행 결과
1
결과가 다른 이유
두 코드는 사실상 동일한 작업을 수행하지만 결과값이 서로 다릅니다. 그 이유는 다음과 같습니다.
- C 언어: 'a'와 같은 문자 상수는 내부적으로 정수(int) 타입으로 승격되어 처리됩니다. 따라서 32비트 시스템에서 int의 크기인 4바이트가 반환됩니다.
- C++ 언어: 'a'는 문자(char) 타입 그대로 취급됩니다. 따라서 char의 크기인 1바이트가 반환됩니다.
참고로 문자 'a'의 ASCII 값은 97이며, C에서 이 값이 실제로 int로 저장된다는 점이 두 언어의 타입 시스템 설계 철학 차이를 잘 보여줍니다. C++은 타입 안정성을 더 중시하는 방향으로 발전하면서 문자 상수를 엄격하게 char 타입으로 유지하는 것입니다.