Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР7.doc
Скачиваний:
1
Добавлен:
13.11.2018
Размер:
71.17 Кб
Скачать

Лабораторная работа № 7. Модульное программирование

1.Цель работы

Цель выполнения данной лабораторной работы состоит в изучении следующих вопросов:

  • сборка программ из нескольких файлов с исходным кодом

  • формирование заголовочных файлов

  • работа с модификаторами классов памяти

2. Теоретические сведения

2.1 Сборка программ из нескольких файлов с исходным кодом

Программа на языке С – это совокупность функций. Запуск любой программы начинается с запуска главной функции (функция main), содержащей в себе всю остальную часть программы. Внутри главной функции для реализации заданного алгоритма вызываются все другие необходимые функции. Часть функций создается самим программистом, другая часть – библиотечные функции – поставляется пользователю со средой программирования и используется в процессе разработки программ (например, printf(), sqrt() и др.).

Простейший метод использования нескольких функций подразумевает их размещения в одном и том же файле. Обычно простые программы состоят из одного исходного файла. Дело обстоит несколько сложнее, если эта программа становится большой. При работе с такой программой может возникнуть несколько достаточно серьезных проблем:

  1. Файл, становясь большим, увеличивает время компиляции, и малейшие изменения в исходном тексте автоматически вынуждают тратить время программиста на перекомпиляцию программы.

  2. Если над программой работает много человек, то практически невозможно отследить сделанные изменения.

  3. Процесс правки и ориентирования при большом исходном тексте становится сложным,поэтому поиск небольшой ошибки может повлечь за собой вынужденное "изучение" кода заново.

Это далеко не все проблемы, которые могут возникнуть при наличии программы "монстра". Поэтому при разработке программ рекомендуется их разбивать на куски, которые функционально ограничены и закончены.

Для того, чтобы вынести функцию или переменную в отдельный файл надо перед ней поставить зарезервированное слово extern. Давайте для примера создадим программу из нескольких файлов. Сначала создадим главную программу, в которой будут две внешние процедуры. Назовем этот файл main.c:

#include<stdio.h>

// описываем функцию f1() как внешнюю

externint f1();

// описываем функцию f2() как внешнюю

externintf2();

// описываем переменную а как внешнюю

externinta;

int main()

{

int n1, n2;

n1 = f1();

n2 = f2();

printf("f1() = %d\n",n1);

printf("f2() = %d\n",n2);

printf("a = %d\n",a);

return 0;

}

Теперь с помощью меню «проект» добавляем два новых элемента: два с++ файла, каждый из которых будет содержать полное определение внешней функции из главной программы. Файлы назовем f1.c и f2.c:

// файл f1.c

inta;

int f1()

{

return 2;

}

// файл f2.c

int f2()

{

return 10;

}

2.2 Использование заголовочных файлов

Если бы при использовании любых переменных, функций или типов из других файлов необходимо было бы перечислять их все в своем файле, писать программы было бы весьма неудобно (помните ли вы наизусть типы аргументов и возвращаемых значений всех используемых вами стандартных функций?) – поэтому разработчики библиотек функций выделяют их описания в отдельные файлы с расширением .h (от header–заголовок). Для создания такого файла в среде VisualStudio 2008 в меню «проект» выбираем пункт «добавить новый элемент» и указываем на шаблон «Заголовочный файл(.h)». Например, вместе с файлами f1.cи f2.cпоставлялся бы fileheader.h со следующим содержимым:

int f1();

int f2();

extern int a;

В таком случае в main.c достаточно было бы написать #include «fileheader.h». Это намного удобнее явного перечисления необходимых функций и переменных.

В заголовочном файле могут присутствовать только extern – описания переменных, заголовки функций (без реализации), определения структур иtypedef – определения типов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]