다음을 통해 공유


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

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

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

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

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

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

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

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

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

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

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

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

제네릭 텍스트
데이터 형식 이름
_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 데이터 형식 사용