Using Generic-Text Mappings

 

For the latest documentation on Visual Studio 2017 RC, see Visual Studio 2017 RC Documentation.

Microsoft Specific

To simplify code development for various international markets, the Microsoft run-time library provides Microsoft-specific "generic-text" mappings for many data types, routines, and other objects. These mappings are defined in TCHAR.H. You can use these name mappings to write generic code that can be compiled for any of the three kinds of character sets: ASCII (SBCS), MBCS, or Unicode, depending on a manifest constant you define using a #define statement. Generic-text mappings are Microsoft extensions that are not ANSI compatible.

Preprocessor Directives for Generic-Text Mappings

#defineCompiled versionExample
_UNICODEUnicode (wide-character)_tcsrev maps to _wcsrev
_MBCSMultibyte-character_tcsrev maps to _mbsrev
None (the default: neither _UNICODE nor _MBCS defined)SBCS (ASCII)_tcsrev maps to strrev

For example, the generic-text function _tcsrev, defined in TCHAR.H, maps to mbsrev if MBCS has been defined in your program, or to _wcsrev if _UNICODE has been defined. Otherwise _tcsrev maps to strrev.

The generic-text data type _TCHAR, also defined in TCHAR.H, maps to type char if _MBCS is defined, to type wchar_t if _UNICODE is defined, and to type char if neither constant is defined. Other data type mappings are provided in TCHAR.H for programming convenience, but _TCHAR is the type that is most useful.

Generic-Text Data Type Mappings

Generic-text data type nameSBCS (_UNICODE, _MBCS not defined)_MBCS defined_UNICODE defined
_TCHARcharcharwchar_t
_TINTintintwint_t
_TSCHARsigned charsigned charwchar_t
_TUCHARunsigned charunsigned charwchar_t
_TXCHARcharunsigned charwchar_t
_T or _TEXTNo effect (removed by preprocessor)No effect (removed by preprocessor)L (converts following character or string to its Unicode counterpart)

For a complete list of generic-text mappings of routines, variables, and other objects, see Generic-Text Mappings.

The following code fragments illustrate the use of _TCHAR and _tcsrev for mapping to the MBCS, Unicode, and SBCS models.

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

If MBCS has been defined, the preprocessor maps the preceding fragment to the following code:

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

If _UNICODE has been defined, the preprocessor maps the same fragment to the following code:

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

If neither _MBCS nor _UNICODE has been defined, the preprocessor maps the fragment to single-byte ASCII code, as follows:

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

Thus you can write, maintain, and compile a single source code file to run with routines that are specific to any of the three kinds of character sets.

END Microsoft Specific

Generic-Text Mappings
Data Type Mappings
Constant and Global Variable Mappings
Routine Mappings
A Sample Generic-Text Program

Show: