Макросы типа TCHAR
, макросы TEXT
и _T
предназначены для кода, который компилируется как в юникодном, так и в не-юникодном формате.
- Если вы настраиваете свой проект как Unicode,
TCHAR
является typedef для wchar_t
, в противном случае это просто char
.
-
L
перед строковым литералом (например, L"Test"
) указывает компилятору, что константа должна быть строкой в юникоде.
- Оба макроса
TEXT
и _T
вставляют этот символ L перед литералом, если проект собран как Unicode. TEXT("Test")
- это L"Test"
в сборках Unicode, в противном случае просто "Test"
.
При вызове библиотечных функций, таких как вызовы Win32 API или библиотека времени выполнения C, вы всегда должны вызывать независимую от символьного типа версию вызова функции, например, _tcslen
вместо strlen
или wcslen
.
Примеры:
// Non-unicode build
const char* str = "Hello, World";
size_t len = strlen( str );
// Unicode build
const wchar_t* str = L"Hello, World";
size_t len = wcslen( str );
// Works with both
const TCHAR* str = _T("Hello, World");
size_t len = _tcslen( str );