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_t
8비트 signed char
16비트 대응입니다.) 국제 애플리케이션의 경우 바이트가 아닌 _TCHAR
단위로 작동하는 _tcs
함수 제품군을 사용합니다. 예를 들어 _tcsncpy
은(는) n
바이트가 아닌 n
_TCHARs
을(를) 복사합니다.
일부 SBCS(Single Byte Character Set) 문자열 처리 함수는 char*
매개 변수를 사용하므로 _MBCS
이(가) 정의되면 형식 불일치 컴파일러 경고가 발생합니다. 다음 세 가지 방법으로 이 경고를 방지할 수 있습니다.
tchar.h에서 형식이 안전한 인라인 함수 thunks를 사용합니다. 이 옵션은 기본 동작입니다.
명령줄에서
_MB_MAP_DIRECT
을(를) 정의하여 tchar.h에서 직접 매크로를 사용합니다. 이렇게 하는 경우 형식을 수동으로 일치시켜야 합니다. 이는 속도가 가장 빠른 방법이지만 형식이 안전하지 않습니다.tchar.h에서 형식 안전 정적으로 연결된 라이브러리 함수 unks를 사용합니다. 이렇게 하려면 명령줄에서
_NO_INLINING
상수를 정의합니다. 이는 속도가 가장 느린 방법이지만 형식은 가장 안전합니다.
일반 텍스트 매핑용 전처리기 지시문
# define | 컴파일 버전 | 예시 |
---|---|---|
_UNICODE |
유니코드(와이드 문자) | _tcsrev 는 _wcsrev 에 매핑됩니다. |
_MBCS |
멀티바이트 문자 | _tcsrev 는 _mbsrev 에 매핑됩니다. |
없음(기본값: _UNICODE 및 _MBCS 둘 다 정의되지 않음) |
SBCS(ASCII) | _tcsrev 는 strrev 에 매핑됩니다. |
예를 들어 tchar.h에 정의된 일반 텍스트 함수인 _tcsrev
는 프로그램에 _MBCS
가 정의된 경우에는 _mbsrev
로 매핑되고, _UNICODE
가 정의된 경우에는 _wcsrev
로 매핑됩니다. 그렇지 않으면 _tcsrev
는 strrev
로 매핑됩니다. 프로그래밍 편의를 위해 다른 데이터 형식 매핑이 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);
따라서 이러한 세 가지 종류의 문자 집합과 관련된 루틴에서 실행할 단일 소스 코드 파일을 작성하고, 유지하고, 컴파일할 수 있습니다.