2013-03-19 2 views

답변

20

_T은 "텍스트"를 나타냅니다. 유니 코드를 지원하는 소스를 컴파일하는 경우에만 리터럴을 유니 코드 와이드 문자 리터럴로 변환합니다. http://msdn.microsoft.com/en-us/library/c426s321.aspx을 참조하십시오.

+4

기술적으로'_T()'는 C 런타임 라이브러리에서만 사용되며'_TCHAR' 데이터 유형과 함께 사용됩니다. Win32에 상응하는 것은'TCHAR' 데이터 타입과 함께 사용되는'TEXT()'매크로입니다. 둘 다'_UNICODE'와'UNICODE'가 컴파일 중에 정의되는지에 따라'char' 또는'wchar_t'에 매핑됩니다. 둘 다 일반적으로 함께 정의되거나 정의되지 않으므로 많은 사람들이 상호 교환하는 경향이 있으며 모든 것이 일반적으로 작동합니다. 그러나 그들은 논리적으로 분리되어 있으므로 그에 따라 대우되어야합니다. C 함수에는'_TCHAR'과'_T()'를 사용하십시오. Win32 API에는'TCHAR'과'TEXT()'를 사용하십시오. –

+0

@RemyLebeau : 이제 까다로운 질문이 있습니다 : MFC/ATL의 'CString' 유형에 어느 것을 사용할 것입니까? 'CString'은 Windows API뿐만 아니라 CRT의 관점에서 구현됩니다. – IInspectable

+0

설명서별로 : "*** CString은 TCHAR 데이터 유형 **. *"을 기반으로하므로'TEXT() '를 사용하십시오. –

10

알려줍니다 needed.What 유니 코드 지원이 어디 예를 들어, _T ("안녕하세요")를 들어 내가 프로젝트에서 이것을 보았다 :

사용을 _T 일반적으로 리터럴 문자열을 코드에 매크로, 유니 코드 또는 유니 코드없이 ANSI 문자열 (MBCS 포함)로 유니 코드 문자열로 컴파일합니다.

8

실제로는 유니 코드 ANSI 지원이 필요한 프로젝트에 사용됩니다. 컴파일러가 프리 D 파일러 정의의 값에 따라 유니 코드 또는 ANSI로 문자열 리터 2을 컴파일하도록 지시합니다.

왜 이렇게하고 싶은지 다른 문제입니다. 유니 코드 만 지원하려면이 경우 L"Hello" 유니 코드를 작성하십시오. _T() 매크로는 Windows NT 이상 (유니 코드 지원) 및 Windows 9x/ME (지원하지 않음)를 지원해야 할 때 추가되었습니다. 요즘은 모든 현대 Windows 버전이 유니 코드 기반이기 때문에 이러한 매크로를 사용하는 코드는 더 이상 사용되지 않습니다.

관련 문제