|
|
|
| Когда объявляется Unicode строка в начало добавляется L, а когда обычная char-строка, в начало ничего не добавляется?
wchar_t uni[] = L"Unicode-строка";
char str[] = "Обычная строка"; | Правильно я понимаю? Т.е. если проект с мультибайтовой кодировкой используем первое определение, а если в однобайтовой, то второе? | |
|
|
|
|
|
|
|
для: asker++
(23.01.2012 в 17:48)
| | Вообще по стандарту C++ да, все именно так. Другое дело, что если вы пользуетесь Visual Studio, то у вас есть возможность писать обобщенный код, который позволит в случае чего откомпилировать проект и под однобайтовую кодировку, и под юникод. Для этого вместо wchar_t и char следует использовать TCHAR, а вместо L использовать один из макросов _T, TEXT или _TEXT
TCHAR unistr[] = _T("А чего захотите, то и будет");
TCHAR unistr[] = _TEXT("А чего захотите, то и будет");
TCHAR unistr[] = TEXT("А чего захотите, то и будет"); | Если проект определен как Unicode-проект, то вместо TCHAR подставится wchar_t, а вместо _T - L. Если же проект определен как ASCII, то вместо TCHAR подставится char, а вместо _T ничего не подставится.
Аналогично с другими функциями, особенно, WinAPI, все они на самом деле имеют суффикс A (ASCII) или W (Unicode), который определяет в какой форме функция принимает и возвращает параметры, однако, на деле вы используете функцию без префикса, а выбор в пользу той или иной функции осуществляется в зависимости от выбора типа проекта. Но если WinAPI - это детище Microsoft, оно как хочет может его переделать, то стандарт переделать нельзя, поэтому для стандартных функций вроде main() или C-функций для работы со строками ввели аналоги, начинающиеся с символов подчеркивания - они тоже заменяются в зависимости от выбора однобайтового или многобайтового набора символов. | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 18:34)
| | Спасибо, а какой заголовочный файл нужно подключать?
Раз тут всё на макросах, в других системах код тоже можно использовать? Просто нужно будет переопределить макросы? К этому TCHAR можно применять sizeof() или есть какие-то подводные камни? | |
|
|
|
|
|
|
|
для: asker++
(23.01.2012 в 19:00)
| | >Спасибо, а какой заголовочный файл нужно подключать, чтобы воспользоваться?
>Раз тут всё на макросах, в других системах код тоже можно использовать? Просто нужно будет
>переопределить макросы?
Ну теоретически да, практически, все-равно придется много перерабатывать.
>К этому TCHAR можно применять sizeof() или есть какие-то
>подводные камни?
Да, можно совершенно спокойно применять sizeof(). | |
|
|
|
|
|
|
|
для: cheops
(23.01.2012 в 19:18)
| | Спасибо, ещё раз! | |
|
|
|