Включаемые файлы
В предыдущих разделах данной главы часто упоминался файл <stdio.h>, был также приведен его полный текст. <stdio.h> - это наиболее часто используемый включаемый файл при программировании на C в ОС UNIX. Разумеется, существует много других включаемых файлов.
Включаемые файлы содержат определения и описания, одновременно используемые более чем одной функцией. Как правило, имена включаемых файлов имеют расширение .h. Содержимое включаемых файлов обрабатывается препроцессором языка C во время компиляции. Для указания препроцессору о необходимости включения файла применяется директива #include, которую нужно поместить в текст программы. Вообще, директивой препроцессора считаются строки программы, начинающиеся с символа #. Чаще всего используются директивы #include и #define. Как уже говорилось, директива #include
используется для вызова (и обработки) содержимого указанного в ней включаемого файла. Директива #define указывает препроцессору, что в тексте программы необходимо заменить каждое вхождение определяемого имени на цепочку лексем. Например, директива
#define _NFILE 20
устанавливает максимальное допустимое количество файлов, одновременно открытых программой, равным 20. Полный список директив препроцессора приведен в статье cpp(1).
В тексте Справочника программиста упоминается около 45 различных включаемых файлов. При этом всегда в директиве #include имя включаемого файла изображается в угловых скобках <>. Пример:
#include <stdio.h>
Угловые скобки в этом случае обозначают, что препроцессор будет считать, что включаемый файл расположен в определенном каталоге. Как правило, таким каталогом является /usr/include. Если Вы хотите какие-либо собственные определения или описания сделать доступными для нескольких файлов, Вы можете создать .h-файл с помощью любого редактора, поместить его в подходящий каталог, и указать его имя в директиве #include следующим образом:
#include "../defs/rec.h"
В данном случае необходимо указать в кавычках ("") относительное маршрутное имя файла. Указывать полное маршрутное имя файла не рекомендуется, так как в этом случае могут возникнуть трудности при переносе программ, а также другие организационные проблемы. Чтобы не указывать полные маршрутные имена, можно при компиляции программ пользоваться опцией препроцессора -Iкаталог. Если указана эта опция, препроцессор разыскивает включаемые файлы, имена которых указаны в кавычках, следующим образом. Сначала производится поиск в каталоге, в котором расположен компилируемый файл, затем в каталогах, указанных в опции (опциях) -I, и, наконец, в каталогах из стандартного списка. Заметим также, что все включаемые файлы, имена которых указаны в угловых скобках <>, сначала отыскиваются в списке каталогов, заданных с помощью опции -I, а затем в каталогах из стандартного списка.
Утилита make предоставляет возможность, аналогичную директиве #include препроцессора языка C. Если первые семь символов в какой-либо строке make-файла составляют цепочку include, а за ними следует пробел либо табуляция, остаток строки считается именем файла, который будет прочитан текущим запуском утилиты make. В именах включаемых файлов могут быть использованы макросы. Описатели читаемых включаемых файлов накапливаются, поэтому число вложенных включаемых файлов ограничено (не может быть больше 16).