Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет37/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   33   34   35   36   37   38   39   40   ...   256
1.3.6 Модули 
Программа С++ почти всегда состоит из нескольких раздельно транслируемых "модулей". Каждый 
"модуль" обычно называется исходным файлом, но иногда - единицей трансляции. Он состоит из 
последовательности описаний типов, функций, переменных и констант. Описание extern позволяет из 
одного исходного файла ссылаться на функцию или объект, определенные в другом исходном файле. 
Например: 
extern "C" double sqrt ( double ); 
extern ostream cout; 
Самый распространенный способ обеспечить согласованность описаний внешних во всех исходных 


Бьерн Страуструп.
Язык программирования С++ 
 
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 


Достарыңызбен бөлісу:
1   ...   33   34   35   36   37   38   39   40   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет