Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Код не компилируется для русскоязычной версии |
Автор: Compositum 25.12.2011, 16:11 | ||||||
Добрый день. В свободное время потихоньку изучаю Си (не C++, а именно C - для форматирования кода использую вариант "C++", т.к. в предлагаемом списке отсутствует вариант "C"). Код на C (стандарт C89). Показываю две версии: "английскую" и "русскую". "Английская версия":
"Английская" версия компилируется без проблем и работает. "Русская" версия:
"Русская" версия не компилируется, пишет:
Приведённая мною выше "русская" версия, взята из книги Герберта Шилдта "Полный справочник по C", 4-е издание. Там в примере так же русские символы. Об указанной мною выше проблеме ни слова не написано... Видимо переводчик перевёл, а на работоспособность код проверен не был. Что нужно сделать, чтобы заработал и "русский" вариант? Спасибо. |
Автор: boostcoder 25.12.2011, 16:19 |
русский исходник сохрани в кодировке cp1251 или utf8 |
Автор: Compositum 25.12.2011, 16:22 | ||
у меня файл и так сохранён в UTF-8. |
Автор: actuator 25.12.2011, 18:00 |
-Wmultichar |
Автор: Compositum 25.12.2011, 18:12 | ||
? |
Автор: actuator 26.12.2011, 03:55 |
GCC не будет работать с многобайтовыми строками (а UTF - многобайтовые), пока ты ему это прямо не укажешь предложенным аргументом. Пока не умеешь работать с ними, пиши такие программки в однобайтовой кодировке, которую примет твоя консоль - cp866 (win) или koi-8 (freebsd). |
Автор: Compositum 26.12.2011, 09:36 |
Благодарю за ответы! Я переписал код, используя вместо char тип wctype_t (добавил нужные include, ну и имена вызывающих функций соответственно подправил). Откомпилировал с указанием опции '-w'. Компиляция прошла успешно, программка отработала. Но у меня возникли др. вопросы по теме:
Просто получается, что для того, чтобы работать с Unicode нужно постоянно заморачиваться с преобразованием char в wctype_t, т.е. по умолчанию "мама" воспринимается как массив char, а 's' - как char. А хотелось бы, чтобы было наоборот: чтобы "мама" воспринимается как массив wctype_t, а 's' - как wctype_t. Ну а при необходимости всегда можно преобразовать wctype_t в char (просто wctype_t при написании локализованных приложений используется гораздо чаще, чем char). Спасибо. |
Автор: Compositum 26.12.2011, 11:15 |
Всё оказалось просто: 1. L"Hello World" - массив двухбайтных символов. 2. L's' - двухбайтный символ ![]() |