Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СообЧа. Программирование на С++ (лучше поздно, чем никогда)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

СообЧа. Программирование на С++
Выпуск 3: К совершенно новому проекту будь готов!

Голосование

Итак, голосование продолжается. Пока что с большим отрывом побеждает изучение материала в виде отдельных лекций  и Windows API в качестве основного объекта изучения. Хотя это и не окончательные сведения и голосование продолжается, сегодняшний выпуск я создавал, основываясь на этих результатах.

Ниже представлена памятка для голосования.

Внизу вашему вниманию предлагаются 2 вопроса. Выбрав подходящий ответ, щелкайте на ссылке или отправляйте письмо по указанному адресу с темой, соответствующей вашему ответу.
С чего следует начинать обучение?

Как следует организовать обучение?


Теоретическая часть
"К совершенно новому проекту будь готов!"

Для того, чтобы создавать программы, вам потребуется 2 основных вещи:

  • Компилятор

  • Редактор (а лучше IDE - интегрированная среда разработки

Теперь поговорим более подробно про каждый из этих 2-х компонентов.

Компилятор. Компилятор представляет собой средство, позволяющее из исходных ресурсов создавать выполняемые программы. Компилирование переводит исходный код - тот, который понимает человек - в машинные инструкции, которые понимает компьютер.

Процесс превращения исходного кода в машинный довольно сложен. В нем, например, определяется, как преобразовать инструкции верхнего уровня в специфические инструкции нижнего уровня, предназначенные для компьютера. После завершения этого процесса, получается исполняемая программа (если, конечно, в исходном коде нет ошибок). Ее-то как раз и можно запускать.

В качестве хорошего компилятора могу порекомендовать Borland C++ Compiler. Этот компилятор обладает огромным количеством полезных особенностей (в частности, поддерживает стандарт ANSI C/C++) и, самое главное, абсолютно бесплатный. Да да, именно так. Видимо, компания Inprise (бывшая Borland) решила, что пользователи, поработав с Borland C++ Compiler, сразу же побегут покупать Borland C++ Builder. Скачать компилятор можно на официальном сайте компании www.borland.com. Здесь же можно приобрести и бесплатную версию Turbo Debugger (тем, кто не знает, что такое отладчик, она вряд ли понадобится).

Редактор. Редактор используется для создания и редактирования того самого исходного кода. Программистские редакторы отличаются от обычных текстовых процессоров прежде всего тем, что:

  • Подсвечивают синтаксис языков программирования

  • Позволяют подключать компиляторы и отладчики

  • Позволяют создавать проекты

Подсветка синтаксиса заключается в том, что те слова, которые нельзя использовать в качестве имен переменных (они называются ключевыми словами) редактор отображает одним цветом. Комментарии - другим. Куски исходного кода на Ассемблере - третьим. Ну и так далее.

Подключение компилятора позволяет скомпилировать и запустить программу, не выходя из редактора - т.е. буквально одним щелчком мыши.

Проекты - это специальные файлы, содержащие информацию о том, какие исходные файлы надо скомпилировать (и как), чтобы получить исполняемую программу. Все современные программы были созданы с использованием проектов.

Вопрос: а можно ли обойтись без проектов?

Ответ: можно. Для этого используются  специальные make-файлы. Как и файлы проектов, make-файлы содержат информацию об исходных ресурсах, необходимых для создания программы. Однако make-файлы придется создавать вручную, в то врмя как проекты создаются автоматически самими редактором. Вот кусок типичного make-файла:

dtbsagnt.obj: $(Dep_dtbsagntobj)

$(BSS32) -c @&&|

$(CompOptAt_dtbsagntexe)

$(CompInheritOptsAt_dtbsagntexe) -0$@ dtbsadnt.cpp

Посмотришь, и все сразу понятно, правда? Так что, использование проектов - вещь очень и очень нужная.

В качестве редактора могу рекомендовать CrEdit (www.geocities.com/plamen_p/credit/index.html).

Большинство людей (и я в их числе) использует не редакторы, а IDE - Integrated Development Environment или Интегрированную Среду Разработки. IDE отличается от редактора тем, что поставляется со встроенным компилятором, отладчиком, редактором ресурсов, менеджером проектов и 3-мя бутылками Coca Cola для подержания пользователей в бодром настроении. Существует 2 наиболее распространенных IDE:

  • Microsoft Visual C++ от корпорации Microsoft. Хорошая IDE, позволяющая создавать огромное количество типов современных программ. Правда, дороговата. Заказать  Visual C++ можно у регионального дилера Microsoft или купить на любом рынке, торгующем нелегальным софтом.

  • Borland C++, о компиляторе которой я уже говорил. Также хорошая IDE, поддерживающая Object Windows Library (библиотеку для работы с Windows от компании Borland) и Microsoft Foundation Classes (то же, но от Microsoft). Я лично пользуюсь Borland Turbo C++ Suite - это та же Borland C++, только попроще. Заказать продукты Borland можно у регионального дилера Borland или на любом рынке, торгующем нелегальным софтом.

Вышеперечисленные IDE можно также заказать в различных Интернет-магазинах, например www.megashop.ru

После всего вышесказанного у меня осталось огромное чувство неудовлетворенности: вот насоветовал вам тут покупать что-то у каких-то там дилеров, а насчет того, где взять аналогичные программы, но подешевле, ничего не сказал. Поэтому говорю: заходите на любой каталог программного обеспечения и в разделе Development Tools (или как-нибудь иначе) ищите редактор или IDE. Нашли? Скачивайте! Не нашли? Ищите дальше. Внизу перечень каталогов бесплатного ПО.

Русские серверы:

Зарубежные серверы:

Если у вас возникнут вопросы, связанные с одним из этих 2-х компонентов, то пишите письма:


Практическая часть

Эта часть вообще-то должна изобиловать вопросами и ответами на них. Однако, пока что меня мало спрашивают, наверное уже все знают. Тем не менее, один вопрос я получил.

Привет Павел.

Подписался на вашу рассылку и теперь жду очередного выпуска.

А пока жду, хочу рассказать о проблеме. Я начал изучать WinApi и написал простую программу, выводящую окно на экран. Но оно выводится и тут же исчезает. Как этого избежать?

С уважением           Денис Алексеев

Автор вопроса прислал мне и исходный текст программы. Ошибку я обнаружил сразу (поскольку в свое время сам столкнулся с подобной проблемой). Дело в том, что окно закрывается в том случае, если получит событие WM_CLOSE. Следовательно в программе Юрия имеется кусок кода, который после создания окна посылает ему событие WM_CLOSE. Обнаружить его труда не составило: в функции WndProc, которая обрабатывает события главного окна, я нашел фрагмент кода, который независимо от действий пользователя или Windows посылал главному окну сообщение WM_CLOSE. Вот как это выглядит:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch(message)
  {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    default:
      DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}

А должно быть вот как:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch(message)
  {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    default:
      return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}

Т.е. если функции WndProc посылается событие WM_DESTROY, она должна завершить работу приложения, что достигается путем вызова функции PostQuitMessage. В противном случае следует вызвать функцию DefWindowProc и не просто вызвать (как было у Дениса), а передать ее результат функции WndProc (т.е. return DefWindowProc; в этом примере return играет главную роль, от которой и зависит, будет ли ваше приложение работать или же сразу завершаться).


На этом все ваши вопросы исчерпаны, жду новых... или хорошо забытых старых.

Пока, пока!


О рассылке "СообЧа. Программирование на C++".
Ведущий: Павел Незамаев pnezamaev@hotmail.com

Темы писем:
Мои спонсоры и начальники

Рассылка СообЧа: http://subscribe.ru/catalog/comp.soft.prog.soobcha
Сайт СообЧа: http://www.soobcha.boom.ru и его авторы
Егор Гостев: evrica@nytva.permnet.ru?subject=Soobcha
Алексей: mreset@mail.ru
 
Авторское право (C) 2000 Павел Незамаев pnezamaev@hotmail.com

http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное