Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C와 C++에서 문자 리터럴의 타입 차이 완벽 정리

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++이 타입 안정성을 더 엄격하게 강조하는 언어 설계 철학을 반영한 것입니다. 실무에서 문자 리터럴의 크기나 타입에 의존하는 코드를 작성할 때는 반드시 이 차이를 염두에 두어야 합니다.