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

Linux에서 C와 C++의 문자 리터럴 'a' 크기 차이 완벽 정리

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++ 간에 이식성 있는 코드를 작성할 때는 이러한 미묘한 차이를 반드시 염두에 두어야 합니다.