_MBCS와 TCHAR.H 데이터 형식 사용Using TCHAR.H Data Types with _MBCS

Microsoft 전용Microsoft Specific

일반 텍스트 라우팅 매핑 표에 나와 있듯이(일반 텍스트 매핑 참조) 매니페스트 상수 _MBCS가 정의되면 지정된 일반 텍스트 루틴이 다음 종류의 루틴 중 하나에 매핑됩니다.As the table of generic-text routine mappings indicates (see Generic-Text Mappings), when the manifest constant _MBCS is defined, a given generic-text routine maps to one of the following kinds of routines:

  • 멀티바이트 바이트, 문자 및 문자열을 적절하게 처리하는 SBCS 루틴.An SBCS routine that handles multibyte bytes, characters, and strings appropriately. 이 경우 문자열 인수는 char* 형식이어야 합니다.In this case, the string arguments are expected to be of type char*. 예를 들어 _tprintfprintf에 매핑되고 printf에 대한 문자열 인수는 char* 형식입니다.For example, _tprintf maps to printf; the string arguments to printf are of type char*. 문자열 형식에 대해 _TCHAR 일반 텍스트 데이터 형식을 사용하는 경우 _TCHAR*char*에 매핑되므로 printf에 대한 형식 및 실제 매개 변수 형식은 일치합니다.If you use the _TCHAR generic-text data type for your string types, the formal and actual parameter types for printf match because _TCHAR* maps to char*.

  • MBCS 관련 루틴.An MBCS-specific routine. 이 경우 문자열 인수는 unsigned char* 형식이어야 합니다.In this case, the string arguments are expected to be of type unsigned char*. 예를 들어 _tcsrevunsigned char* 형식의 문자열을 사용하고 반환하는 _mbsrev에 매핑됩니다.For example, _tcsrev maps to _mbsrev, which expects and returns a string of type unsigned char*. 마찬가지로 문자열 형식에 대해 _TCHAR 일반 텍스트 데이터 형식을 사용하는 경우 _TCHARchar 형식에 매핑되므로 형식 충돌이 발생할 수 있습니다.Again, if you use the _TCHAR generic-text data type for your string types, there is a potential type conflict because _TCHAR maps to type char.

    이러한 형식 충돌(및 이로 인한 C 컴파일러 경고 또는 C++ 컴파일러 오류)을 방지하기 위한 방법으로는 다음 세 가지가 있습니다.Following are three solutions for preventing this type conflict (and the C compiler warnings or C++ compiler errors that would result):

  • 기본 동작을 사용합니다.Use the default behavior. TCHAR.H는 다음 예제와 같이 런타임 라이브러리의 루틴에 일반 텍스트 루틴 프로토타입을 제공합니다.TCHAR.H provides generic-text routine prototypes for routines in the run-time libraries, as in the following example.

    char *_tcsrev(char *);  
    

    기본 경우에 _tcsrev에 대한 프로토타입은 LIBC.LIB의 썽크를 통해 _mbsrev에 매핑됩니다.In the default case, the prototype for _tcsrev maps to _mbsrev through a thunk in LIBC.LIB. 이로 인해 _mbsrev의 들어오는 매개 변수 및 보내는 반환 값의 형식이 _TCHAR *(예: char *)에서 unsigned char *로 변경됩니다.This changes the types of the _mbsrev incoming parameters and outgoing return value from _TCHAR * (such as char *) to unsigned char *. 이 방법을 사용하는 경우 _TCHAR을 사용할 때 형식 일치가 보장되지만 함수 호출 오버헤드 때문에 속도는 비교적 느려집니다.This method ensures type matching when you are using _TCHAR, but it is relatively slow because of the function call overhead.

  • 코드에서 다음 전처리기 문을 통합하여 함수 인라인을 사용합니다.Use function inlining by incorporating the following preprocessor statement in your code.

    #define _USE_INLINING  
    

    이 방법을 사용하면 TCHAR.H에 제공된 인라인 함수 썽크가 일반 텍스트 루틴을 해당 MBCS 루틴에 직접 매핑합니다.This method causes an inline function thunk, provided in TCHAR.H, to map the generic-text routine directly to the appropriate MBCS routine. TCHAR.H에서 발췌한 다음 코드는 이 방법의 에제를 제공합니다.The following code excerpt from TCHAR.H provides an example of how this is done.

    __inline char *_tcsrev(char *_s1)  
    {return (char *)_mbsrev((unsigned char *)_s1);}  
    

    인라인을 사용할 수 있는 경우 형식 일치가 보장되고 추가적으로 시간이 소요되지 않으므로 최선의 방법입니다.If you can use inlining, this is the best solution, because it guarantees type matching and has no additional time cost.

  • 코드에서 다음 전처리기 문을 통합하여 “직접 매핑"을 사용합니다.Use "direct mapping" by incorporating the following preprocessor statement in your code.

    #define _MB_MAP_DIRECT  
    

    기본 동작을 사용하지 않으려고 하거나 인라인을 사용할 수 없는 경우 이 방법이 가장 빠른 대안입니다.This approach provides a fast alternative if you do not want to use the default behavior or cannot use inlining. 이 방법을 사용하면 TCHAR.H의 다음 예제와 같이 일반 텍스트 루틴이 매크로에 의해 MBCS 버전의 루틴으로 직접 매핑됩니다.It causes the generic-text routine to be mapped by a macro directly to the MBCS version of the routine, as in the following example from TCHAR.H.

    #define _tcschr _mbschr  
    

    이 방법을 사용할 때는 문자열 인수 및 문자열 반환 값에 적절한 데이터 형식이 사용되도록 주의해야 합니다.When you take this approach, you must be careful to ensure that appropriate data types are used for string arguments and string return values. 형식 캐스팅을 사용하여 적절한 형식 일치를 보장하거나 _TXCHAR 일반 텍스트 데이터 형식을 사용할 수 있습니다.You can use type casting to ensure proper type matching or you can use the _TXCHAR generic-text data type. _TXCHAR은 SBCS 코드의 char 형식을 MBCS 코드의 unsigned char 형식에 매핑합니다._TXCHAR maps to type char in SBCS code but maps to type unsigned char in MBCS code. 일반 텍스트 매크로에 대한 자세한 내용은 일반 텍스트 매핑을 참조하세요.For more information about generic-text macros, see Generic-Text Mappings.

    Microsoft 전용 종료END Microsoft Specific

참고 항목See Also

국제화 Internationalization
범주별 런타임 루틴Run-Time Routines by Category