본문 바로가기

MFC

MFC_ 문자열(_T 매크로 , L 접두사)

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 문자열보다 더 많은 용량을 차지한다.