본문 바로가기
개발언어/C++

_T( ) 매크로

by 엔돌슨 2010. 5. 26.
반응형

펌 : http://binyjini.tistory.com/entry/T-매크로-정리

보통 프로그래밍을 할 때 _T("") 매크로를 사용하면서도 그냥 컴파일 에러가 나면 한번 써보고 에러 안나면 오케이 하고선 그냥 넘어가는 경우가 있을지도 모른다는 생각에 간단히 정리합니다.

우리가 보통 유니코드 문자열을 처리할 때 L"this is a literal string" 과 같이 하는데요, _T 매크로를 사용하게 되면 프로젝트 세팅에 유니코드가 정의되어 있으면 유니코드 문자열로 컴파일 하고 그렇지 않으면 ANSI문자열(MBCS 포함)로 컴파일 됩니다.

아래는 간단한 예 입니다.

pWnd->SetWindowText( "Hello" );
이 코드 대신에 다음 코드가 사용됩니다.

pWnd->SetWindowText( _T("Hello") );
_UNICODE가 정의되어 있으면 _T는 리터럴 문자열을 L 접두사가 있는 형식으로 변환하고, 그렇지 않으면 L 접두사가 없는 문자열로 변환합니다. 

_T 매크로는 _TEXT 매크로와 동일합니다.

 초기화 하는 경우에는 char * strData = null과 같이 CString strData = _T("")로 초기화 하면 됩니다.

실제로 tchar.h 를 뒤져보니 아래와 같이 되어 있었습니다.

#ifdef  _UNICODE
#define __T(x)      L ## x
#else   /* ndef _UNICODE */
#define __T(x)      x

간단하죠 ?

아무리 간단한 거라도 제대로 알고 사용하는 것이 중요합니다.