Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_po_si.doc
Скачиваний:
12
Добавлен:
12.11.2018
Размер:
11.78 Mб
Скачать

Модули:

  1. Стандартные – заранее созданные разработчиками языка. Эти модули поставляются в скомпилированном виде, и их без каких-либо доработок можно использовать в программах;

  2. Модули разработчика – надо написать, скомпилировать, отладить, можно вносить изменения.

Некоторые понятия:

Программа С почти всегда состоит из нескольких раздельно транслируемых "модулей". Каждый "модуль" обычно называется исходным файлом, но иногда - единицей трансляции. Он состоит из последовательности описаний типов, функций, переменных и констант. Описание extern позволяет из одного исходного файла ссылаться на функцию или объект, определенные в другом исходном файле.

Например:

extern "c" double sqrt ( double );

extern ostream cout;

Самый распространенный способ обеспечить согласованность описаний внешних во всех исходных файлах - поместить такие описания в специальные файлы, называемые заголовочными. Заголовочные файлы можно включать во все исходные файлы, в которых требуются описания внешних. Например, описание функции sqrt хранится в заголовочном файле стандартных математических функций с именем math.h, поэтому, если нужно извлечь квадратный корень из 4, можно написать:

#include <math.h>

int main()

{

float x;

x=sqrt(4);

return 0;

}

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

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

В команде включения заключенное в угловые скобки имя файла (в нашем примере - ) ссылается на файл, находящийся в стандартном каталоге включаемых файлов. Часто это - каталог /usr/include/CC. Файлы, находящиеся в других каталогах, обозначаются своими путевыми именами, взятыми в кавычки. Поэтому в следующих командах:

#include "math1.h"

#include "/usr/bs/math2.h"

включаются файл math1.h из текущего каталога пользователя и файл math2.h из каталога /usr/bs.

Приведем небольшой законченный пример, в котором строка определяется в одном файле, а печатается в другом. В файле header.h определяются нужные типы:

// header.h -здесь объявляем переменную и функцию

extern char * prog_name;

extern void f();

// main.c -файл основной программы

#include "header.h"

char *prog_name = "примитивный, но законченный пример";

int main()

{

f();

}

// f.c -здесь находится функция f(), которая печатает строку //из осн. программы

#include <iostream.h>

#include "header.h"

void f()

{

cout << prog_name << '\n';

}

Рассмотрим другой пример:

// Основная программа

#include "include_file.cpp" //Подключаем свой модуль

#include <iostream.h>

int main()

{

int a,b,c,d,e;

cout << "Введите A: ";

cin >> a;

cout << "Введите B: ";

cin >> b;

c=fPlus(a,b);

d=fMinus(a,b);

e=fMultiply(a,b);

cout << "Сумма= " << c << endl;

cout << "Разность= " << d << endl;

cout << "Произведение= " << e << endl;

return 0;

}

// Файл include_file.cpp - наш модуль

int fPlus(int,int); //

int fMinus(int,int); // Прототипы функций

int fMultiply(int,int); //

int fPlus(int a,int b)

{

return a+b;

}

int fMinus(int a,int b)

{

return a-b;

}

int fMultiply(int a,int b)

{

return a*b;

}