Информатика и технология программирования

       

Файл Си-программы как элемент модульного программирования


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

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

ОПРЕДЕЛЕНИЕ ПЕРЕМЕННОЙ ИЛИ ФУНКЦИИ - - процесс создания программного эквивалента переменной или функции транслятором по их описанию в программе (трансляция во внутреннее представление)

Определение функции включает в себя заголовок функции и тело, определение переменной -обычное контекстное определение и, возможно, ее инициализацию.


int a = 5 , B[10]={ 1,6,3,6,4,6,47,55,44,77 };

В определении переменной:



-задан тип переменной;



-задано имя переменной;



-определяется размерность и резервируется память. Размерность массивов в определении обязательно должна быть задана;



-производится инициализация памяти;



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


int strcmp(char *s, char *d) { ... }

В определении функции:



-задан тип результата;



-задано имя функции;



-задан список формальных параметров и их типов;



-транслируется тело функции;



-для вызова функции из других модулей в текущем модуле может быть создана точка входа.

Например, определение размещается далее по тексту в текущем модуле или находится в другом модуле.
Переменная или функция при объявлении во внутреннее представление не переводятся, транслятору сообщается лишь факт их существования, имя и тип. Это необходимо для формирования правильного обращения к переменной или к функции.



extern int a,B[];

В объявлении переменной:


-задан тип переменной;


-задано имя переменной.


-
запоминается факт наличия переменной с указанными именем и типом. Размерность массивов в объявлении может отсутствовать.



int strcmp();
int strcmp(char*, char*);
extern int strcmp();
extern int strcmp(char*, char*);



B объявлении функции:


-задается тип функции;


-задается имя функции;


-может быть задан список типов формальных параметров (прототип);


-запоминается факт наличия функции с указанными именем, результатом и, возможно, параметрами.

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


Содержание раздела