C와 C++의 따옴표 규칙
C와 C++에서 작은따옴표(' ')는 단일 문자를 표현하는 데 사용되고, 큰따옴표(" ")는 문자열 리터럴을 표현하는 데 사용됩니다. 겉보기에는 비슷해 보이지만, 내부적으로 처리되는 방식은 완전히 다릅니다.
문자열 리터럴 "x"의 구조
문자열 리터럴 "x"는 단순히 하나의 문자가 아니라 하나의 문자열입니다. 이 문자열은 문자 'x'와 함께 문자열의 끝을 알리는 널 종료자(null terminator) '\0'을 포함합니다.
따라서 "x"는 실제로는 두 개의 요소를 가진 문자 배열(character array)입니다. 즉, {'x', '\0'} 형태로 메모리에 저장됩니다.
문자 리터럴의 타입 차이
C++에서 문자 리터럴(예: 'a')의 타입은 char입니다. 그러나 C에서 문자 리터럴의 타입은 int입니다.
이 차이 때문에 다음과 같은 결과가 나타납니다.
- C 언어에서 32비트 아키텍처 기준으로
sizeof('a')는 4를 반환하며, 이때CHAR_BIT는 8입니다. - 반면
sizeof(char)는 C와 C++ 모두에서 1바이트입니다.
정리
작은따옴표는 단일 문자를, 큰따옴표는 널 종료자를 포함한 문자열을 의미한다는 점을 기억하면 됩니다. 특히 C에서 문자 리터럴이 int 타입으로 취급된다는 사실은 타입 관련 버그를 디버깅할 때 중요한 단서가 될 수 있으므로 주의할 필요가 있습니다.