На этом шаге мы рассмотрим особенности CLR-приложений.
Программы в VC++ называются приложениями (очевидно, приложениями к среде программирования, IDE). Мы так и дальше станем их называть. Приложения строятся средой в виде специальных конструкций - проектов, которые выглядят для пользователя как совокупность нескольких файлов.
Программа на языке С - это совокупность функций, т. е. специальных программных образований, отвечающих определенным требованиям. Причем приложение - это главная функция, внутри которой помещаются операторы, реализующие алгоритм приложения. Среди операторов имеются такие, которые служат для вызова других функций, требующихся при реализации алгоритма. Запуск любой программы начинается с запуска главной функции, содержащей в себе всю остальную часть программы. Часть функций создается самим программистом, другая часть - библиотечные функции - поставляется пользователю со средой программирования и используется в процессе разработки программ. При изучении C/C++ мы будем пользоваться специальным видом приложений - консольными приложениями, которые формируются на основе заранее заготовленных в среде проектирования шаблонов.
Консольные (т. е. опорные, базовые) приложения - это приложения без графического интерфейса, которые взаимодействуют с пользователем через специальную командную строку или (если они работают в рамках IDE) запускаются специальной командой из главного меню среды. Такие приложения создаются с помощью специального шаблона, доступного из диалогового окна, открывающегося после выполнения команды File | New | Project (Файл | Создать | Проект).
Шаблон консольного приложения добавляет в создаваемое приложение необходимые элементы (создается заготовка будущего приложения), после чего разработчик вставляет в этот шаблон свои операторы на языке C/C++. Затем приложение компилируется в автономный исполняемый файл и может быть запущено на выполнение. Общение с пользователем происходит через специальное так называемое консольное окно, открывающееся средой после запуска приложения (в это окно выводятся сообщения программы, через него вводятся данные для расчета и в него же выводятся результаты расчетов).
Компиляция и сборка проекта осуществляются через команду Build (Построение) главного меню среды (структура главного меню меняется в зависимости от совершаемых действий: при загрузке среды она одна (в ней нет опции Build (Построение)), а например, если мы создадим проект, такая опция появляется). После компиляции и сборки проект можно запустить на выполнение. Запуск на выполнение осуществляется с помощью опции Debbug (Отладка) главного меню среды.
Изучение C/C++ мы станем осуществлять на примерах: будем создавать программы, разбирать, как они работают с параллельным изучением их структуры. Консольные приложения, которые мы начнем создавать, имеют шаблон вида CLR Console Application. Последние два слова этого названия понятны - консольное приложение. А что означает аббревиатура CLR?
В Visual C++ 2008 для организации консольных приложений существовало два шаблона: один - тот, что мы рассматриваем, а другой - без аббревиатуры CLR. В новой редакции среды разработки авторы тоже оставили два варианта консольного приложения, только разнесли их использование по разным диалоговым окнам: шаблон с CLR задан в папке CLR, а шаблон для обычного консольного приложения задан в папке Win32.
Так что же это такое CLR? Это специальная среда, которая управляет исполнением программного кода, памятью, потоками данных и работой с удаленными компьютерами, при этом строго обеспечивая безопасность и создавая надежность исполнения кода. CLR является добавкой-расширением C++, введенной фирмой Microsoft, начиная с версии VC++ 2005.
В версиях 2005, 2008 подключение к вашему проекту этой среды осуществлялось на этапе компиляции. Там для консольного приложения (по умолчанию) этот режим не поддерживался (т. е. консольное приложение как бы оставалось в старой версии C++, в "родной" (native), как определили ее авторы добавки CLR).
В этой старой версии, когда вы в своей программе работали с некоторыми объектами, то должны сами заботиться об их размещении в памяти, выделяемой средой. Память для вашего приложения выделяется в так называемой "куче": в ней вы размещаете свои объекты, там же сами освобождаете память, когда перестаете работать с объектом, иначе куча может переполниться и процесс выполнения приложения прервется. Это так называемая неуправляемая куча. Указатели на участки памяти в такой куче обозначаются символом "*".
Другое дело, когда включается режим CLR. Такое приложение отличается от обычного тем, что его заготовка обеспечивает подключение к приложению специального системного пространства System, содержащего объекты, размещение в памяти которых надо автоматически регулировать. Так вот: режим CLR работает уже с управляемой кучей памяти, в которой размещение объектов и ее освобождение от них происходит под управлением среды. Такой сервис входит в язык Java, где не надо делить кучу на управляемую и неуправляемую. В этой среде употребляются так называемые регулируемые указатели на объекты.
Регулируемый указатель - это тип указателя, который ссылается на объекты (адреса памяти, по которым можно обращаться к объектам), расположенные в общей регулируемой куче памяти, предоставленной приложению в момент его исполнения. Для таких указателей принято специальное обозначение: вместо символа "*" применяется символ "^".
Создание CLR привело к необходимости разработки аппарата преобразования переменных, относящихся к одной куче, в адреса в другой и т. п. Этот процесс назвали маршализацией. Существует специальная библиотека, обеспечивающая этот процесс. Однако все это усложнило программирование.
На следующем шаге мы рассмотрим создание консольного приложения.