문제

예를 들어:

// This will become either SomeMethodA or SomeMethodW,
// depending on whether _UNICODE is defined.
SomeMethod( _T( "My String Literal" ) );

// Becomes either AnotherMethodA or AnotherMethodW.
AnotherMethod( _TEXT( "My Text" ) );

나는 둘 다 봤다. _t는 간결하고 명확성을 위해 _text 인 것 같습니다. 이것은 단지 주관적인 프로그래머 선호도입니까, 아니면 그보다 더 기술적입니까? 예를 들어, 다른 하나 이상을 사용하면 내 코드가 특정 시스템이나 이전 버전의 헤더 파일에 대해 컴파일하지 않습니까?

도움이 되었습니까?

해결책

SDK의 간단한 grep은 대답이 그것은 중요하지 않습니다 - 그들은 동일합니다. 그들은 둘 다 바로 변합니다 __T(x).

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define _T(" *.h 
crt\src\tchar.h:2439:#define _T(x)       __T(x) 
include\tchar.h:2390:#define _T(x)       __T(x)

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define _TEXT(" *.h 
crt\src\tchar.h:2440:#define _TEXT(x)    __T(x) 
include\tchar.h:2391:#define _TEXT(x)    __T(x)

그리고 완전성을 위해 :

C:\...\Visual Studio 8\VC>findstr /spin /c:"#define __T(" *.h 
crt\src\tchar.h:210:#define __T(x)     L ## x 
crt\src\tchar.h:889:#define __T(x)      x 
include\tchar.h:210:#define __T(x)     L ## x 
include\tchar.h:858:#define __T(x)      x

하지만, 기술적으로, C ++의 경우 사용해야합니다 TEXT() 대신에 _TEXT(), 그러나 그것은 (결국) 같은 것도 확장됩니다.

다른 팁

유니 코드에 전념하고 그냥 사용하십시오 L"My String Literal".

에서 레이몬드 첸:

텍스트 대 _text vs. _t 및 유니 코드 vs. _unicode

밑줄이없는 일반 버전은 캐릭터에 영향을 미칩니다. Windows 헤더 파일이 기본값으로 취급합니다. 따라서 유니 코드를 정의하면 getwindowtext는 예를 들어 getwindowtexta 대신 getwindowtextw에 매핑됩니다. 마찬가지로, 텍스트 매크로는 "..."대신 l "..."에 매핑됩니다.

밑줄이있는 버전은 캐릭터 세트에 영향을 미칩니다. C 런타임 헤더 파일이 기본값으로 취급됩니다. 따라서 _unicode를 정의하면 _tcslen은 예를 들어 strlen 대신 wcslen에 매핑됩니다. 마찬가지로 _text 매크로는 "..."대신 l "..."에 매핑됩니다.

_t는 어떻습니까? 좋아, 나는 그것에 대해 모른다. 어쩌면 누군가가 타이핑을 저장하는 것일 수도 있습니다.

짧은 버전 : _T() 게으른 사람입니다 _TEXT()

참고 : 글을 쓸 때 소스 코드 텍스트 편집기를 사용하는 코드 페이지를 알고 있어야합니다.

_TEXT("Some string containing Çontaining");
TEXT("€xtended characters.");

컴파일러가 보는 바이트는 편집기의 코드 페이지에 따라 다릅니다.

여기잘 알려진 존경받는 출처의 흥미로운 읽기입니다.

마찬가지로 _text 매크로는 "..."대신 l "..."에 매핑됩니다.

_t는 어떻습니까? 좋아, 나는 그것에 대해 모른다. 어쩌면 누군가가 타이핑을 저장하는 것일 수도 있습니다.

나는 아무도 사용하는 것을 본 적이 없다 _TEXT() 대신에 _T().

어느 것도 아니다. 내 경험에는 두 가지 기본 유형의 문자 리터럴이 있으며, 변하지 않는 문자 및 코드가 현지화 될 때 번역 해야하는 것입니다.

코드를 작성할 때 둘을 구별하는 것이 중요하므로 돌아와서 나중에 어느 쪽인지 알아낼 필요가 없습니다.

그래서 나는 사용한다 _UT() 번역 할 수없는 줄의 경우, 그리고 ZZT() (또는 검색하기 쉬운 다른 것) 번역해야 할 문자열. 인스턴스 _T() 또는 _TEXT() 코드에는 아직 올바르게 분류되지 않은 문자 리터럴의 증거가 있습니다.

_UT 그리고 ZZT 둘 다 #Text로 정의되었습니다

이 매크로는 응용 프로그램이 실제로 유니 코드와 ANSI 버전을 컴파일하기를 원했던 시절부터 보류됩니다.

오늘이 일을 할 이유가 없습니다. 이것은 모든 흔적입니다. Microsoft는 가능한 모든 구성을 영원히 지원하는 데 갇혀 있지만 그렇지 않습니다. ANSI와 유니 코드 모두에 컴파일하지 않는다면 (아무도 솔직히 말해서) L "텍스트"로 가십시오.

그리고 네, 지금까지 명확하지 않은 경우 : _t == _text

또한 사용하지 않고 L "..."쓰레기를 사용하지 마십시오. 모든 문자열에 UTF-8을 사용하고 Microsoft API로 전달하기 직전에 변환하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top