Бьерн Страуструп.
Язык программирования С++
34
файлах - поместить такие описания в специальные файлы, называемые заголовочными. Заголовочные
файлы можно включать во все исходные файлы, в которых требуются описания внешних. Например,
описание функции sqrt хранится в заголовочном файле стандартных математических
функций с именем
math.h, поэтому, если нужно извлечь квадратный корень из 4, можно написать:
#include
//...
x = sqrt ( 4 );
Поскольку стандартные заголовочные файлы могут включаться во многие исходные файлы, в них нет
описаний, дублирование которых могло бы вызвать ошибки. Так, тело функции присутствует в таких
файлах, если только это функция-подстановка, а инициализаторы указаны только для констант ($$4.3).
Не считая таких случаев, заголовочный файл обычно служит хранилищем для типов, он предоставляет
интерфейс между раздельно транслируемыми частями программы.
В команде включения заключенное в угловые скобки имя файла (в нашем примере - )
ссылается на файл, находящийся в стандартном каталоге включаемых файлов. Часто это - каталог
/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 является основной программой:
// main.c
#include "header.h"
char * prog_name = "примитивный, но законченный пример";
int main ()
{
f();
}
а строка печатается функцией из файла f.c:
// f.c
#include
#include "header.h"
void f ()
{
cout << prog_name << '\n';
}
При запуске транслятора С++ и передаче ему необходимых файлов-параметров в различных
реализациях могут использоваться разные расширения имен для программ на С++. На машине автора
трансляция и запуск программы выглядит так:
$ CC main.c f.c -o silly
$ silly
примитивный, но законченный пример
$
Кроме раздельной трансляции концепцию модульности в С++ поддерживают классы ($$5.4).
Бьерн Страуструп.
Язык программирования С++
35
Достарыңызбен бөлісу: