6.3. Модули.
Си-препроцессор.
В языке Паскаль существует
понятие модуля – отдельной, самостоятельной
части программы, предназначенной для
использования программами или другими модулями.
Подключение модуля осуществляется сразу же
после имени основной программы в блоке описания
модулей. Синтаксис подключения модулей таков: uses
ИМЯ МОДУЛЯ.
Зарезервированное слово uses указывается перед именем модуля или
списка модулей.
Транслятор Си имеет встроенное средство,
расширяющее возможности языка и называемое макропроцессором
или препроцессором. Он выполняет
подстановки для макровызовов, проводит условную
трансляцию и подключает указанные файлы. Для
макропроцессора предназначены строки программы,
начинающиеся с символа #. Команда для
подключения библиотечного файла имеет вид: #include
"ИМЯ ФАЙЛА". Обратите внимание, что в
конце команды препроцессора нет точки с
запятой.
Но вернёмся к модулю языка Паскаль. Структура модуля на Паскале такова:
- Сам модуль хранится в отдельном
файле. Имя файла совпадает с именем модуля.
- Заголовок модуля состоит из
зарезервированного слова unit и следующего за ним идентификатора
(имени модуля).
- Далее следует
зарезервированное слово interface, обозначающее начало интерфейсной
части модуля. Здесь описываются объекты
(переменные, константы, процедуры и функции),
доступные из других программ. Для процедур и
функций указываются только заголовки.
- Далее зарегистрированное слово implementation означает начало модуля. Описанные в
этой части объекты скрыты от других программ.
- В разделе реализации содержится
также полное описание подпрограмм, чьи заголовки
указаны в интерфейсной части. Описание
подпрограмм могут иметь сокращённый заголовок,
состоящий только из слова procedure или function,
имени и точки с запятой.
- Завершается модуль, как и
программа, словом end,
после которого ставится точка.
 |
Итак, в модулях языка
Паскаль описываются процедуры и функции, которые
могут использоваться в других программах.
Вызываются такие процедуры и функции также как и
обычные процедуры и функции. |
В языке Си так же можно написать заголовочный
файл, но для начинающего пользователя это
довольно трудная задача. Поэтому постарайтесь
обойтись библиотечными файлами.
Кроме того, в языке Паскаль
имеется восемь стандартных модулей, в которых
содержатся все стандартные процедуры и функции.
Чтобы воспользоваться ресурсами стандартного
модуля, необходимо указать его имя в разделе
описания модулей.
Рассмотрим эти модули и, некоторые,
эквивалентные им заголовочные файлы Си.
System –
содержит автоматически подключаемые ресурсы к
любой программе, поэтому имя этого модуля можно
не указывать.
Dos –
позволяет использовать возможности ОС MSDOS, не предусмотренные стандартами
языка Паскаль.
Crt –
содержит константы и переменные, подпрограммы
для работы с консолью (при вводе с клавиатуры и
при выводе на экран).
Graph –
содержит типы, константы, переменные и
подпрограммы позволяющие создавать графические
изображения.
Overlay
–используется для организации оверлейных
программ.
Turbo3 и Graph3 –
используются для совместимости с программами
старых версий (Turbo Pascal 3.0).
<stdio.h> - содержит автоматически
подключаемые ресурсы к любой программе. Имя этого файла нужно указывать.
<dos.h> - содержит
описания библиотечных функций для обработки
прерываний и соответствующих записей.
<graphics.h> - даны все
необходимые определения для графического
модуля. Для подключения стандартных функций
графической системы необходимо подключение
библиотеки graphics.lib.
<stdarg.h> - библиотека подпрограм-аналогов, работающих
с va-функциями.
<math.h> - собержит
описания библиотечных функций для вычисления
некоторых математических функций.
Работающим в Си программистам
очень нравится его препроцессор. Этот очень
полезный помощник просматривает программу до
компилятора (отсюда и термин – препроцессор) и
заменяет символические аббревиатуры в программе
на соответствующие директивы. Он отыскивает
другие файлы, необходимые программе, и может
также изменить условия компиляции.
Как уже говорилось, все
директивы препроцессора начинаются с символа # в самой левой позиции. В конце
команды препроцессора не ставится точка с
запятой. Теперь рассмотрим директивы
препроцессора более детально.
#include “имя файла” - Действие этой директивы приводит к
включению в программу файла с заданным именем,
который отыскивается в указанном для системы
программирования каталоге.
При записи вида #include <имя файла> -
поиск идёт в стандартных местах, определённых в
системе программирования. Команды #include могут “вкладываться” одна в
другую.
#define идентификатор
подстановка – Вызывает замену в последующем
тексте названного идентификатора на текст подстановки.
Если имеет вид:
#define
идентификатор(идентификатор, …, идентификатор)
подстановка, причём между первым
идентификатором и круглой скобкой нет пробела,
то это определение макроподстановки с
аргументами, т.е. при наличии длинных
определений в подстановке, продолжающихся в
следующей строке, в конце очередной строки с
продолжением ставится символ \.
#if константное выражение –
проверяет, будет ли отличаться от нуля выражение,
составленное из констант.
#ifdef идентификатор –
устанавливает, определён ли в данный момент
указанный идентификатор, т.е. входил ли он в
команду вида #define.
#ifdef идентификатор –
проверяет, не определён ли в данный момент
указанный идентификатор.
Внимание! За
любой из этих команд может следовать
произвольное число строк текста, возможно,
содержащих инструкцию #else
и заканчивающихся строкой #endif.
#undef идентификатор –
приводит к тому, что указанный идентификатор
считается неопределённым, т.е. не подлежит
замене.
Использование команд препроцессора на
конкретных примерах можно посмотреть в разделе
7.2. |