C와 C++은 문법이 매우 비슷해 보이지만, 문자 리터럴(character literal)을 다루는 방식에서 중요한 차이점이 있습니다. 이 차이를 이해하면 두 언어의 타입 시스템을 더 깊이 파악할 수 있습니다.
핵심 차이점: char vs int
C++에서는 문자 상수의 타입이 char입니다. 반면 C에서는 문자 상수의 타입이 정수형(int)으로 취급됩니다.
그 결과, C에서는 32비트 아키텍처 기준으로 sizeof('a')가 4를 반환합니다(단, CHAR_BIT는 8). 하지만 C와 C++ 모두에서 sizeof(char)는 항상 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)로 승격되어 처리되므로sizeof('a')는 4를 반환합니다. - C++의 경우: 문자 리터럴
'a'가 문자(char)로 처리되므로sizeof('a')는 1을 반환합니다.
이러한 차이는 C++이 타입 안정성을 더 엄격하게 강조하는 언어 설계 철학을 반영한 것입니다. 실무에서 문자 리터럴의 크기나 타입에 의존하는 코드를 작성할 때는 반드시 이 차이를 염두에 두어야 합니다.