Search notes:

WinAPI: Definition of TCHAR, TEXT etc. depending on UNICODE

When including <windows.h> (or more accurately, when including <winnt.h>), the preprocessor defines the macros TCHAR and TEXT depending on the defined value of UNICODE (manually edited for simplicity and clarity):
// From WinDef.h
#define CONST const

// UNICODE (Wide Character) types                    -- 340

typedef wchar_t WCHAR;

// typedef   CONST WCHAR   *LPCWCH,  *PCWCH;            -- 351
typedef   CONST WCHAR   *LPCWSTR, *PCWSTR;           -- 357


// ANSI (Multi-bypte Character) types                -- 416

typedef   CONST  CHAR   *LPCSTR,  *PCSTR;            -- 424

#ifdef  UNICODE

   typedef WCHAR   TCHAR , *PTCHAR;
   typedef LPCWSTR PCTSTR,  LPCTSTR;

   #define __TEXT(quote) L##quote

#else

   typedef char    TCHAR, *PTCHAR;
   typedef LPCSTR PCTSTR,  LPCTSTR

   #define __TEXT(quote) quote

#endif

#define TEXT(quote) __TEXT(quote)
This makes it possible to use the same source code when compiling for ansi or wide character targets (See WinAPI: A and W functions.)
Generic Unicode Ansi (Multibyte)
TCHAR WCHAR char
PCTSTR / LPCTSTR LPCWSTR PCTSTR

_UNICODE

While UNICODE is used to direct WinAPI functions, the macro _UNICODE is used for a similar purpose for standard C functions (such as printf or fopen).

TODO

Similarly to TCHAR that is dependent on the defition of UNICODE there is also a CRT _TCHAR that is dependent on the definition of _UNICODE.

See also

WinAPI data types and constants
The GCC option -municode.
Unicode
wchar_t

Index