Модульное программирование на Си
Файл Си-программы как элемент модульного программирования
Модульное программирование – это процесс разработки программы, состоящей из нескольких логически завершенных и взаимосвязанных единиц – модулей.
Классически, в Си, завершённый модуль – функция.
На более глобальном (макро) уровне,
модуль – текстовый файл программы, объединяющий некоторое количество функций, определений типов данных и переменных.
Использовать принцип модульного программирования на уровне файлов –значит:
- получить возможность разделить полный текст программы на несколько файлов;
- транслировать их независимо друг от друга;
- использовать как заготовки для других программ, т.е., фактически, применять объектный подход на более примитивном, низком или логическом уровне.
Например, схема:
main.c |
||||
menu.c |
data_mod.c |
|||
transfer.c |
edit_mod.c |
демонстрирует применение модульного подхода при программировании элементарной базы данных, где каждый файл – законченный элемент логической структуры программы.
Изменяем наполнение модулей – создаём новые варианты уже готовой задачи.
Пишем новый код – используем стандартные функции S в готовых модулях, например в menu.c.
Частным, часто используемым случаем модульного программирования является использование библиотечных функций, т.к. библиотеки представляют собой аналогичные Си-программы, независимо оттранслированные и помещенные в каталог библиотек.
В данной лекции, нас, прежде всего, будет интересовать, какими свойствами обладают переменные и функции, определенные в различных точках модуля – файла,
и
как они "узнают" о существовании друг друга, каким образом взаимодействуют между собой.
Для начала сформулируем ряд необходимых терминов:
МОДУЛЬ – файл Си-программы, транслируемый независимо от других файлов (модулей)
ОПРЕДЕЛЕНИЕ ПЕРЕМЕННОЙ ИЛИ ФУНКЦИИ – процесс создания программного эквивалента переменной или функции транслятором по их описанию в программе (трансляция во внутреннее представление)
Несколько отойдём от непосредственно модульного подхода в программировании и поговорим о необходимой составляющей этого процесса
определении переменных и функций в модулях и их взаимосвязи в многомодульном варианте программы.
Определение функции включает в себя её заголовок и тело.
Определение переменной – обычное контекстное определение и, возможно, её инициализация.
Рассмотрим подробнее на примерах:
int strcmp(char *s, char *d)
{ ... }
В определении функции:
- задан тип результата;
- задано имя функции;
- задан список формальных параметров и их типов;
- транслируется тело функции;
- для вызова функции из других модулей в текущем модуле может быть создана точка входа.
int a = 5, B[10]={1,6,3,6,4,6,47,55,44,77};
В определении переменной:
- задан тип переменной;
- задано имя переменной;
- определяется размерность и резервируется память. Размерность массивов в определении обязательно должна быть задана;
- производится инициализация памяти;
- для доступа к переменной из других модулей в текущем модуле может быть создана точка входа.
ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ ИЛИ ФУНКЦИИ – информация транслятору о том, что указанные переменная или функция где-то определены, но неизвестны в данный момент транслятору
Например, определение размещается далее по тексту в текущем модуле или находится в другом модуле.
Переменная или функция при объявлении во внутреннее представление не переводятся, транслятору сообщается лишь факт их существования, имя и тип. Это необходимо для формирования правильного обращения к переменной или к функции.
extern int a, B[];
В объявлении переменной:
- задан тип переменной;
- задано имя переменной;
- запоминается факт наличия переменной с указанными именем и типом. Размерность массивов в объявлении может отсутствовать.
int strcmp();
int strcmp(char*, char*);
extern int strcmp();
extern int strcmp(char*, char*);
B объявлении функции:
- задается тип функции;
- задается имя функции;
- может быть задан список типов формальных параметров (прототип).
- запоминается факт наличия функции с указанными именем, результатом и, возможно, параметрами.
Различия между определением и объявлением принципиальны!
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.