Язык программирования C++ для профессионалов



           

Заголовочные файлы - часть 2


#include < stream.h> // <stream.h> не будет найден

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

Укажем, что может содержать заголовочный файл:

Определения типовstruct point { int x, y; }; Шаблоны типов template<class T> class V { /* ... */ } Описания функцийextern int strlen(const char*); Определения inline char get() { return *p++; } функций-подстановок Описания данных extern int a; Определения константconst float pi = 3.141593; Перечисления enum bool { false, true }; Описания имен class Matrix; Команды включения файлов #include <signal.h> Макроопределения#define Case break;case Комментарии /* проверка на конец файла */

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

Определений обычных функций char get() { return *p++; } Определений данныхint a; Определений составныхconst tb[i] = { /* ... */ }; констант

По традиции заголовочные файлы имеют расширение .h, а файлы, содержащие определения функций или данных, расширение .c. Иногда их называют "h-файлы" или "с-файлы" соответственно. Используют и другие расширения для этих файлов: .C, cxx, .cpp и .cc. Макросредства в С++ используются не столь широко, как в С, поскольку С++ имеет определенные возможности в самом языке: определения констант (const), функций-подстановок (inline), дающие возможность более простой операции вызова, и шаблонов типа, позволяющие порождать семейство типов и функций.

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




Содержание  Назад  Вперед