C와 C++은 문법이 비슷해 보이지만, 문자 리터럴을 처리하는 방식에는 중요한 차이가 있습니다. C++에서 문자 리터럴(예: 'a')의 자료형은 char입니다. 반면 C 언어에서 문자 리터럴의 자료형은 정수형(int)으로 취급됩니다.
그렇기 때문에 C에서는 32비트 아키텍처 기준으로 sizeof('a')가 4를 반환하며, 한 바이트당 비트 수를 나타내는 CHAR_BIT 값은 8입니다. 반면 sizeof(char)는 C와 C++ 모두에서 항상 1바이트라는 점이 흥미롭습니다.
C 예제 코드
#include<stdio.h>
int main() {
printf("%d", sizeof('a'));
}
실행 결과
4
C++ 예제 코드
#include<iostream>
using namespace std;
int main() {
cout << sizeof('a');
}
실행 결과
1
두 프로그램은 사실상 동일한 작업을 수행하지만, 실행 결과는 서로 다릅니다. 그 이유는 다음과 같습니다.
- C 언어: 문자 상수는 정수 상수 승격(integer promotion) 규칙에 따라
int타입으로 처리됩니다. 따라서 int가 4바이트인 일반적인 시스템에서sizeof('a')는 4를 반환합니다. - C++ 언어: 문자 리터럴은
char타입으로 정의됩니다. 따라서sizeof('a')는 1을 반환합니다.
결론적으로, 같은 코드처럼 보여도 컴파일되는 언어에 따라 문자 리터럴의 자료형 해석이 달라지므로, C와 C++ 간에 이식성 있는 코드를 작성할 때는 이러한 미묘한 차이를 반드시 염두에 두어야 합니다.