MFC DialogBased - PullRequest
       5

MFC DialogBased

0 голосов
/ 22 июня 2009

Когда использовать _TCHAR типы символов? _T(_TEXT) и L макросы? В чем разница между ними?

1 Ответ

3 голосов
/ 22 июня 2009

Макросы типа 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...