Автор: cheops (23.01.2012 в 18:34)
Вообще по стандарту 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-функций для работы со строками ввели аналоги, начинающиеся с символов подчеркивания - они тоже заменяются в зависимости от выбора однобайтового или многобайтового набора символов.