Инструменты пользователя

Инструменты сайта


include

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

include [2011/04/08 21:43] (текущий)
Строка 1: Строка 1:
 +====== include и заголовочный файлы ======
 +Заголовочный файл (иногда головной файл, англ. header file), или подключаемый файл — в языках программирования Си и C++ файл, содержащий определения типов данных,​ структуры,​ прототипы функций,​ перечисления,​ макросы препроцессора. Имеет по умолчанию расширение .h; иногда для заголовочных файлов языка C++ используют расширение .hpp. Заголовочный файл используется путём включения его текста в данный файл директивой препроцессора #include. Заголовочный файл в общем случае может содержать любые конструкции языка программирования,​ но на практике исполняемый код (за исключением inline-функций в C++) в заголовочные файлы не помещают. Например,​ идентификаторы,​ которые должны быть объявлены более чем в одном файле, удобно описать в заголовочном файле, а затем его подключать по мере надобности.
  
 +Заголовочные файлы оказываются весьма эффективным средством при модульной разработке крупных программ. Также, в практике программирования на С обычна ситуация,​ при которой,​ если в программе используется несколько функций,​ то удобно тексты этих функций хранить в отдельном файле. При подготовке программы пользователь включает в нее тексты используемых функций с помощью команд #​include. ​
 +
 +По традиции заголовочные файлы имеют расширение .h, а файлы, содержащие определения функций или данных,​ расширение .c. Иногда их называют "​h-файлы"​ или "​с-файлы"​ соответственно. Используют и другие расширения для этих файлов:​ .C, cxx, .cpp и .cc. Принятое расширение вы найдете в своем справочном руководстве.
 +
 +Для включения файлов из стандартных каталогов (обычно каталоги с именем INCLUDE) надо вместо кавычек использовать угловые скобки < и >. Если имя_файла - в угловых скобках,​ то препроцессор разыскивает файл в стандартных системных каталогах. Если имя_файла заключено в кавычки,​ то вначале препроцессор просматривает текущий каталог пользователя и только затем обращается к просмотру стандартных системных каталогов. Например:​
 +
 +        #include <​stream.h> ​   // включение из стандартного каталога. Имя в угловых скобках.
 +        #include "​myheader.h" ​ // включение из текущего каталога. Имя в кавычках.
 +        #include "​..\CommonFiles\CmnHdr.h"​
 +Включение из стандартных каталогов имеет то преимущество,​ что имена этих каталогов никак не связаны с конкретной программой (обычно вначале включаемые файлы ищутся в каталоге /​usr/​include/​CC,​ а затем в /​usr/​include). К сожалению,​ в этой команде пробелы существенны:​
 +
 +        #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 файла: lex.c, syn.c, table.c и main.c, и заголовочный файл dc.h, содержащий описания всех имен, которые используются более чем в одном .c файле.
 +====== Множественные Заголовочные Файлы (.h) ======
 +Стиль разбиения программы с одним заголовочным файлом наиболее пригоден в тех случаях,​ когда программа невелика и ее части не предполагается использовать отдельно. Поэтому то, что невозможно установить,​ какие описания зачем помещены в заголовочный файл, несущественно. Помочь могут комментарии. Другой способ - сделать так, чтобы каждая часть программы имела свой заголовочный файл, в котором определяются предоставляемые этой частью средства. Тогда каждый .c файл имеет соответствующий .h файл, и каждый .c файл включает свой собственный (специфицирующий то, что в нем задается) .h файл и, возможно,​ некоторые другие .h файлы (специфицирующие то, что ему нужно). ​
 +
 +====== Ссылки ======
 +  * [[http://​citforum.ru/​programming/​cpp/​gl4.shtml|Бьярн Страустрап Введение в язык С++]]
загрузка...
include.txt · Последние изменения: 2011/04/08 21:43 (внешнее изменение)