MFC(Microsoft Foundation Classes)에서 문자열을 다룰 때 _T 매크로와 L 접두사의 주된 차이는 문자열의 유니코드 및 ANSI(멀티 바이트) 호환성에 있다.
_T 매크로
_T 매크로는 유니코드와 ANSI(멀티 바이트) 문자열을 모두 지원하는 프로그램을 작성할 때 사용된다.
이 매크로는 문자열 리터럴 앞에 사용되며, 컴파일러가 유니코드 모드로 컴파일 중이면 유니코드 문자열로, 그렇지 않으면 ANSI 문자열로 처리한다.
예를 들어, _T("Hello")은 유니코드 모드에서는 L"Hello"로 처리되고, ANSI 모드에서는 "Hello"로 처리된다.
이는 프로그램을 다국어 환경에서도 쉽게 사용할 수 있도록 하고 코드의 호환성을 높이기 위해 사용된다.
L 접두사
L은 리터럴 문자열이 유니코드 문자열임을 명시적으로 나타내는 접두사다.
L을 문자열 앞에 붙이면, 해당 문자열은 무조건 유니코드 문자열(wchar_t 타입의 배열)로 처리된다.
예를 들어, L"Hello"는 유니코드 문자열로 처리되며, 이는 주로 유니코드만을 지원하는 애플리케이션에서 사용된다.
요약
_T 매크로는 유니코드와 ANSI 모드 사이의 호환성을 제공하여, 컴파일 시점에 따라 적절한 문자열 타입으로 변환됩니다. 이는 주로 유니코드와 멀티 바이트를 모두 지원해야 하는 애플리케이션 개발에 유용하다.
L 접두사는 문자열이 유니코드임을 명시적으로 나타내며, 주로 유니코드 문자열만을 사용하는 애플리케이션 개발에 사용된다.
두 방식의 선택은 주로 애플리케이션의 국제화(i18n) 요구 사항과 호환성 목표에 따라 결정됩니다.
차이가 있다면, 문자열의 용량은 문자열을 처리하는 방식(ANSI 대 Unicode)에 따라 달라진다.
ANSI 문자열
ANSI 문자열은 1바이트(char)를 사용하여 각 문자를 표현.
ANSI 모드에서 _T 매크로를 사용하면, 문자열은 ANSI 문자열로 처리된다.
예를 들어, _T("Hello")는 "Hello"와 동일하고, 각 문자는 1바이트를 차지.
Unicode 문자열
Unicode 문자열은 일반적으로 2바이트(wchar_t)를 사용하여 각 문자를 표현. (UTF-16 인코딩에서)
L 접두사를 사용하거나, Unicode 모드에서 _T 매크로를 사용하면, 문자열은 Unicode 문자열로 처리된다.
예를 들어, L"Hello" 또는 Unicode 모드에서 _T("Hello")는 각 문자가 2바이트를 차지.
용량 비교
ANSI 문자열("Hello")의 경우, 5개 문자로 구성되며, 문자당 1바이트를 차지하여 총 5바이트의 용량이 필요.
Unicode 문자열(L"Hello" 또는 Unicode 모드에서의 _T("Hello"))의 경우, 동일한 5개 문자가 각각 2바이트를 차지하여 총 10바이트의 용량이 필요.
결론적으로, _T 매크로와 L 접두사가 지정하는 문자열의 용량은 컴파일 모드(Unicode 대 ANSI)에 따라 달라지며, Unicode 문자열은 동일한 문자 수를 가진 ANSI 문자열보다 더 많은 용량을 차지한다.
'MFC' 카테고리의 다른 글
MFC_문자열(L접두사 기능) (0) | 2024.05.09 |
---|---|
MFC_문자열(_T 메크로 기능) (0) | 2024.05.09 |
MFC_ 자주하는 실수 (1)_LNK1120, LNK2001 (0) | 2024.05.09 |
MFC(Microsoft Foundation Classes) 대화상자 기반 설치 방법 (0) | 2024.05.09 |
MFC(Microsoft Foundation Classes) 란? (0) | 2024.05.09 |