Другие записи:
люди и любовь |
Games for everyone |
Колонка автора: С днём Святого Патрика! |
Конец жизни 2182 г Решил, если писать про какие нибудь задроческие темы, то делать это настолько подробно(это лучше, нежели наобарот. :), что бы каждый мог разобраться. Как у меня получится посмотрим. Не расписывал подробно то, что уж сильно бы увеличило размеры поста.
Было дело, очень долго мучался как выводить на экран русские символы. Обычно часто замечал, что на это забивают и печатают транслитом или по английски. Ну вот, еще давно с этим разобрался и создал шаблонный проэкт на Codeblocks-е. Выкладываю
тут.
Я использовал
данную среду разработки. Очень простая в использовании и напоминает всем знакомую студию. Если решите ей воспользоваться, то должны по крайней мере знать такую фитчу:
Не знаю почему, на главной странице не пишут последние версии программы. Т.е. что находится в категории Download, обычно сильно устаревший продукт, но зато стабильный. Все новые версии находятся под веткой
Nightly builds, на форуме codeblock-a. Я сильно удивился сколько всего приятного там добавили, просто по умолчанию(на виртуалках, новых системах..) ставил устаревшию версию.
Чем мне нравится данная среда разработки, так это тем, что она достаточно простая, можно сказать легка и поставляется с mingw компилятором.(MinGW это своего рода замена программам из линукса, которые бесплатны и т.д и т.п..) Точнее с mingw реализацией gcc компилятора.(GCC - можно сказать единственный компилятор под линуксом, так же есть g++ - это для с++.).
И после установки данной среды можно достаточно быстро начать писать приложение, если бы не одно "но". Хотелось бы сделать вывод функции printf на русский язык, потому что так приятнее, приятнее писать программы.
Решение заключается в том, что данная среда разработки по умолчанию редактирует файлы в кодировке cp1251. Следовательно при компиляции программы, нужно использовать опцию -finput-charset=cp1251 .
Что бы установить опцию в своем проэкте следует пройтись по меню Projects->Build Options... и в Закладке Compiler Settings->Other options добавить строчку -finput-charset=cp1251 .
Я пытался поставить юникод, как кодировку по умолчания для редактирования файлов. Немного помучался, не добился нормальной компиляции программы. Но этого и не надо, способ с кодировкой cp1251 работает же.
Теперь можно спокойно писать программы на русском языке. Но вывод на консоль все равно останется кривым, если не добавить пару поправок. Смотрите данный файл, main.c:
#include
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL,"russian_russia.866");
printf("%s","Hello!\n");
wprintf(L"%s", L"Привет!\n");
MessageBox(NULL, "Привет", "Error", MB_OK);
MessageBoxW(NULL, L"Привет", L"Error", MB_OK);
return 0;
}
Что бы писать программы на русском языке нужно познакомится с таким понятием как юникод, т.е. буквы кодируются 2мя байтами. Вещь не страшная, но для некоторых бывает непривычной. Если кодировка содержит 1 байт, то возможных комбинаций кодирования 256, если 2 байта то 256*256. Если в 1 байт умудрялись запихнуть английскую и например русскую кодировку. То для 2х байтов место для всех хватает.
И вот, если написать строчку "Hello" то она будет в 1байтовой кодировке(скорее всего cp1251), а если L"Hello", то в юникоде(но даже юникод бывает разным, но это не существенно). Следовательно для разных строчек, нужно использовать разные функции вывода и их обработки. Но это достаточно просто, если использовать функции с префиксом или постфиксом W: printf / wprintf, MessageBox / MessageBoxW.
Что бы не запариваться каждый раз, что и как печатать, я написал данный шаблон и разместил его
тут.
Пароль как всегда мой ник.
З.Ы. Была проблема с wcout, решалась просто - не использовать, потому что данной реализации нету в поставке mingw-g++. Как вариант предлагалось скачать открытую разработку stl (название не помню), скомпилировать её с нужными флагами и использовать. У мя не получилось, ну и как всегда забросил данную тему в глубокий пыльный шкаф..
З.Ы.Ы. Буквы L и W означают long и wide соответсвенно.