Практикум программирования на C++ под Windows
comp.soft.prog.cppwin
Выпуск #5
13/10/2000
*** СРЕДА ПРОГРАММИРОВАНИЯ **********************************************
Дааа... А подписчиков-то все больше становится...
Новым подписчикам НАСТОЯТЕЛЬНО рекомендую посетить
Архив РассылкиПроект приложения
Исходный текст программы на C/C++ состоит из одного или нескольких файлов
(с расширением .C или .CPP), в одном из которых определена функция main.
Множество таких файлов, по которым собирается программа, составляет проект
приложения - говорят что эти файлы включены в проект. Помимо C/CPP-файлов
в проект включаются:
.H, .HPP Заголовочные файлы - объявления функций, структур данных,
констант и т.д.
.RC Текстовое описание ресурсов программы
.BMP, .CUR, .ICO Ресурсные файлы
Набор файлов, составляющих проект приложения, вместе с ключами компиляции,
описывается в _файле проекта_.
В среде Visual C++ введено понятие рабочего пространства (workspace) - как
набора связанных друг с другом проектов, один из которых считается текущим.
В рамках среды работа над приложением ведется только в рамках какого-либо
рабочего пространства.
Начинаем творить
1. Создаем новый проект
File | New... | вкладка Projects (названия пунктов меню я даю для MSVS)
Выбираем тип проекта:
Win32 Application - оконное приложение (начнем с выпуска #8)
Win32 Console Application - консольное (неоконное) приложение (#6)
Задаем директорию проекта (Location)
Задаем название проекта - Project name (до 8 латинских символов или цифр)
2. Создаем файлы
File | New... | вкладка Files
C++ Source File - исходные файлы C++ - .CPP
C/C++ Header File - заголовочный файл C/C++ - .H
Задаем имя файла (File name)
3. Пишем программу
4. Компилируем
Build | Build
5. Исправляем ошибки и к шагу 4
(главное, чтобы этот цикл не был бесконечным)
6. Запускаем
Build | Start Debug | Go
Вызывая команды, обращайте внимание на иконки и сочетания клавиш. Зачем
"ползать" по меню, когда то же самое можно вызвать одним щелчком мыши
или нажатием клавиши?..
Отладка
Любой компилятор с языка C/C++ поддерживает два режима компиляции:
- отладочный режим (debug) - для сборки программы с максимальным контролем
ошибок, сохранением информации для отладчика (об адресах функций и
переменных)
- рабочий режим (release) - для получения максимально оптимизированной
программы, например, с целью передачи пользователю.
Эти два режима отличаются, по сути, только параметрами запуска компилятора
и объявлением нескольких идентификаторов.
В норме вся работа по написанию программы проводится в отладочном режиме. Это
позволяет детектировать ошибки на более ранней стадии и упрощает их поиск.
Процесс написания программы состоит обычно из циклического повторения
нескольких шагов:
1. Некоторое логически законченное изменение текста, в результате которого
получается работающая программа. Изменение обычно не должно быть
слишком сложным, ломающим многие сложившиеся структуры
2. Компиляция одного из исходных модулей или всей программы
3. Исправление выявленных (в идеале - только синтаксических) ошибок
4. Тестирование - запуск программы с целью убедиться в корректности
проделанных изменений. Тесты должны проверять работу исправленного
фрагмента во всех возможных режимах.
5. Анализ и исправление найденных логических ошибок
Логические ошибки могут проявлять себя самым различным образом. Это
неправильное поведение программы, "зависания", сбросы, почти незаметная
"грязь" на экране и, наконец, остановы по ошибке. Во время тестового прогона
нужно быть очень внимательным ко всем мелочам.
Домашнее задание
1. Создайте новый проект типа "Win32 Console Application", создайте в нем
файл main.cpp и поместите в него программу из выпуска #4
2. Добейтесь того, чтобы программа удачно скомпилировалась и заработала
3. Попробуйте допустить в программе несколько различных ошибок и посмотрите
какие сообщения об ошибках выдает компилятор
4. Хватит заниматься ерундой. Найдите себе простую, но интересную задачу, и
вперед! Давно пора...
Философское отступление
Среди почты по рассылке пришло письмо моего давнего друга, собаку съевшего
на программировании под Windows:
> Кстати, для каких разработки каких видов проектов предлагается использовать
> VC++? Сейчас спектр возможностей очень широк, но дело в том, что в области
> разработки прикладных вещей под Windows намечается уход от C/C++ в сторону
> более высокоуровневых платформно-независимых языков. Ты, надеюсь, читал о
> проекте Visual Studio 7? VC там уже не образует ядро среды; ATL может, и
> останется для совместимости, но едва ли будет рекомендоваться для новых
> разработок... Хотя сам VC++/Win32 никуда пока не денется.
> Однако, речь идет о C++ for Windows... Разве что поговорить о модели памяти,
> синхронизации потоков... Или это слишком мудрено?
Так что имейте в виду: С/С++, Win32 - это инструменты. Мощные,
функциональные, но занимающие свою нишу и не более. C++ - один
из современных процедурных языков, поддерживающих объектный подход. MSVC
- только его реализация с удобным редактором. И использовать его, например,
как средство быстрой разработки приложений (Rapid Application Developing,
RAD) мягко говоря, неудобно. Тем не менее, применение C++ для очень многих
прикладных задач с продолжительным жизненным циклом весьма оправданно.
Говоря кратко, все зависит от задачи...
И вообще говоря, выбор языка и среды разработки - отдельная большая тема
для разговора. Сейчас, пожалуй, не время ее поднимать, а может - и не
место.
Содержание
Напомню темы предыдущих выпусков:
#0 Проба пера
#1 Вводная по рассылке
#2 Вводная по курсу
#3 Вводная по средствам
#4 Введение в C++
#5 Среда программирования - этот выпуск
Мои планы по рассылке следующие (* - материал уже полностью готов):
#6 Консоль
#7 Введение в C++. Продолжение
#8 Простейшая оконная программа
#8A Текст простейшей оконной программы
#9 Рисование
#10 Рисование II
#11 События от внешних устройств
#12 Стиль программирования
#12A * Стандарт кодирования
#13 Тест
#13A Ответы на тест
Обратная связь
Вы не сторонние наблюдатели - я могу изменить наполнение выпусков согласно
вашим пожеланиям. Если вы с чем-то не согласны, у вас есть предложения или
возникли проблемы - пишите мне. Я отвечаю на каждое письмо.
Мне хотелось бы, чтобы в письмах по поводу рассылки вы ставили тему
"cppwin". Кроме того, я предпочитаю почту в виде обычного текста в
кодировке КОИ-8Р.
Проблема языкового барьера стоит для многих довольно остро. И в этом
смысле мало чего можно сделать. Документация ВСЯ на английском и ее ОЧЕНЬ
много. Самый разумный выход - выучить английский. Технический английский -
это относительно небольшой набор слов. Другой вариант - использование
программы-переводчика. Можно всю страницу справочника через буфер обмена
переносить в переводчик и разбираться в полученной абракадабре. Сам я
пользовался пословным переводчиком (напр., Context 3.51) и вам советую.
Задача массового перевода документации упирается в отсутствие продвинутого
переводчика текста с высоким качеством перевода и возможностью задать
большой словарь исключений.
Меня спрашивают, как скоро начнется что-то "по настоящему интересное".
Я понимаю, что уровень подготовки читателей различен. Так бывает всегда -
в любой группе, в любом классе. И я вовсе не стремлюсь вас уравнять...
Но, мне кажется, я взял неплохой темп. Так скоро мы уже перейдем к
тонкостям Win32, а там глядишь - и до MFC недалеко... Isn't it?
Больше всего было вопросов "почему printf?" (речь идет о первом примере
в #4) Да, действительно, эта функция из стандартной библиотеки языка C. Нет,
я не забыл, что говорю о C++ и Windows. НО!
1. C++ вовсе не отменяет C и его стандартные библиотеки, а напротив -
включает их в себя
2. printf никто не отменял, более того, Win32 содержит подобную свою
функцию - wsprintf
3. C++ не вынуждает вас писать именно в объектном стиле и Б.Страуструп
пишет об этом в своей книге
Наконец, самая главная причина такого начала - это последовательность
обучения, которой я придерживаюсь:
1. Процедурный подход и Win32. Консольные, а затем простейшие оконные
приложения. Изучение основ C/C++
2. Более сложные Win32-приложения. Детали Win32 и C/C++
3. Сложные структуры данных. Переход к объектному подходу
4. Основы MFC
5. Тонкости С++ и сложные MFC-приложения
Такой подход (испытанный на практике) позволяет обойти проблему "изучения
всего и сразу", дает логичную преемственность (когда очередной этап основан
на предыдущих) и позволяет освоить несколько парадигм программирования.
Предвижу массу возражений. У каждого, конечно же, свое мнение. Я буду
прислушиваться к ним. Но основной голос для меня - это изменения счетчика
числа подписчиков...
И еще одно...
Господа критики ! Будьте снисходительны!.. Никто не может объять
необъятного. Иногда я НАМЕРЕННО что-то "забываю". Иногда - делаю ошибки,
чаще всего - довольно глупые. Лишь бы я не ошибся в главном. Моя цель
- ПОМОЧЬ. "Поощрения", причитающиеся за рассылку не покрывают даже расходов
на e-mail, не говоря уже о моих собственных усилиях. Мне кажется, есть не
люди не часто хотят поделиться своими знаниями, скорее наоборот...
Говоря о недостатках, скажите о достоинствах. И задайте СЕБЕ вопрос: а вы
сами делаете хоть что-то для других?..
Когда я начал преподавать в университете, заметил одну странную
особенность: все мои друзья точно знают, КАК ИМЕННО нужно преподавать. Но
читаю лекции почему-то я, а не они...
*************************************************************************
Количество подписчиков: 4208
Архив Рассылки
Никита Зимин
mailto:Nikita_Zeemin@mail.ru?subject=cppwin