다음을 통해 공유


tchar.h의 제네릭 텍스트 매핑

Microsoft 런타임 라이브러리는 국제적인 사용을 위해 코드 전송을 간소화하기 위해 많은 데이터 형식, 루틴 및 기타 개체에 대한 Microsoft 관련 일반 텍스트 매핑을 제공합니다. tchar.h에 정의된 이러한 매핑을 사용하여 #define 문을 사용하여 정의하는 매니페스트 상수에 따라 싱글바이트, 멀티바이트 또는 유니코드 문자 집합에 대해 컴파일할 수 있는 제네릭 코드를 작성할 수 있습니다. 제네릭 텍스트 매핑은 ANSI와 호환되지 않는 Microsoft 확장입니다.

tchar.h를 사용하여 동일한 원본에서 싱글바이트, MBCS(멀티바이트 문자 집합) 및 유니코드 애플리케이션을 빌드할 수 있습니다. tchar.h는 올바른 전처리기 정의를 사용하여 str, _mbs 또는 wcs함수에 적절하게 매핑하는 매크로(접두사 _tcs 있음)를 정의합니다. MBCS를 빌드하려면 기호 _MBCS를 정의합니다. 유니코드를 빌드하려면 기호 _UNICODE를 정의합니다. 단일 바이트 애플리케이션을 빌드하려면 둘 다 정의하지 않습니다(기본값). 기본적으로 _UNICODE는 MFC 응용 프로그램에 대해 정의됩니다.

_TCHAR 데이터 형식은 tchar.h에서 조건부로 정의됩니다. _UNICODE 기호가 빌드에 대해 정의되면 _TCHAR이(가) wchar_t(으)로 정의됩니다. 그렇지 않으면 싱글 바이트 및 MBCS 빌드의 경우 char(으)로 정의됩니다. (기본 유니코드 와이드 문자 데이터 형식인 wchar_t8비트 signed char16비트 대응입니다.) 국제 애플리케이션의 경우 바이트가 아닌 _TCHAR 단위로 작동하는 _tcs 함수 제품군을 사용합니다. 예를 들어 _tcsncpy은(는) n바이트가 아닌 n _TCHARs을(를) 복사합니다.

일부 SBCS(Single Byte Character Set) 문자열 처리 함수는 char* 매개 변수를 사용하므로 _MBCS이(가) 정의되면 형식 불일치 컴파일러 경고가 발생합니다. 다음 세 가지 방법으로 이 경고를 방지할 수 있습니다.

  1. tchar.h에서 형식이 안전한 인라인 함수 thunks를 사용합니다. 이 옵션은 기본 동작입니다.

  2. 명령줄에서 _MB_MAP_DIRECT을(를) 정의하여 tchar.h에서 직접 매크로를 사용합니다. 이렇게 하는 경우 형식을 수동으로 일치시켜야 합니다. 이는 속도가 가장 빠른 방법이지만 형식이 안전하지 않습니다.

  3. tchar.h에서 형식 안전 정적으로 연결된 라이브러리 함수 unks를 사용합니다. 이렇게 하려면 명령줄에서 _NO_INLINING 상수를 정의합니다. 이는 속도가 가장 느린 방법이지만 형식은 가장 안전합니다.

일반 텍스트 매핑용 전처리기 지시문

# define 컴파일 버전 예시
_UNICODE 유니코드(와이드 문자) _tcsrev_wcsrev에 매핑됩니다.
_MBCS 멀티바이트 문자 _tcsrev_mbsrev에 매핑됩니다.
없음(기본값: _UNICODE_MBCS 둘 다 정의되지 않음) SBCS(ASCII) _tcsrevstrrev에 매핑됩니다.

예를 들어 tchar.h에 정의된 일반 텍스트 함수인 _tcsrev는 프로그램에 _MBCS가 정의된 경우에는 _mbsrev로 매핑되고, _UNICODE가 정의된 경우에는 _wcsrev로 매핑됩니다. 그렇지 않으면 _tcsrevstrrev로 매핑됩니다. 프로그래밍 편의를 위해 다른 데이터 형식 매핑이 tchar.h에 제공되지만 _TCHAR이 가장 유용합니다.

일반 텍스트 데이터 형식 매핑

Generic-Text
데이터 형식 이름
_UNICODE &
_MBCS 정의되지 않음
_MBCS
정의됨
_UNICODE
정의됨
_TCHAR char char wchar_t
_TINT int unsigned int wint_t
_TSCHAR signed char signed char wchar_t
_TUCHAR unsigned char unsigned char wchar_t
_TXCHAR char unsigned char wchar_t
_T 또는 _TEXT 효과 없음(전처리기에 의해 제거됨) 효과 없음(전처리기에 의해 제거됨) L(다음 문자 또는 문자열을 유니코드 문자 또는 문자열로 변환)

루틴, 변수 및 기타 개체의 제네릭 텍스트 매핑 목록은 런타임 라이브러리 참조에서 제네릭 텍스트 매핑을 참조하세요.

참고 항목

포함된 null 바이트를 포함할 가능성이 있는 유니코드 문자열과 함께 str 함수 패밀리를 사용하지 마세요. 마찬가지로 MBCS(또는 SBCS) 문자열과 함께 wcs 함수 패밀리를 사용하지 마세요.

다음 코드 조각은 MBCS, 유니코드 및 SBCS 모델에 매핑하는 데 _TCHAR_tcsrev를 사용하는 방법을 보여 줍니다.

_TCHAR *RetVal, *szString;
RetVal = _tcsrev(szString);

_MBCS이(가) 정의된 경우 전처리기는 이 조각을 다음 코드에 매핑합니다.

char *RetVal, *szString;
RetVal = _mbsrev(szString);

_UNICODE이(가) 정의된 경우 전처리기는 이 조각을 다음 코드에 매핑합니다.

wchar_t *RetVal, *szString;
RetVal = _wcsrev(szString);

_MBCS 또는 _UNICODE가 둘 다 정의되지 않은 경우 전처리기는 다음과 같이 해당 조각을 싱글바이트 ASCII 코드에 매핑합니다.

char *RetVal, *szString;
RetVal = strrev(szString);

따라서 이러한 세 가지 종류의 문자 집합과 관련된 루틴에서 실행할 단일 소스 코드 파일을 작성하고, 유지하고, 컴파일할 수 있습니다.

참고 항목

텍스트 및 문자열
_MBCS 코드와 TCHAR.H 데이터 형식 사용