Описание тега header-files
Заголовочные файлы используются в некоторых языках программирования для хранения исходного кода в одном контейнере, заголовочном файле, который может потребоваться в нескольких исходных файлах во время обработки исходных файлов. Цель файла заголовка - уменьшить дублирование одних и тех же исходных строк, необходимых в нескольких файлах. Вместо клонирования исходных строк в каждый из файлов, где они необходимы, исходные строки помещаются в файл заголовка. Затем файл заголовка втягивается в исходный файл компилятором или обработчиком сценария во время обработки исходного файла.
В результате необходимо поддерживать только одну копию исходных строк, а одну копию исходного текста можно повторно использовать в нескольких файлах.
Основная цель файлов заголовков - упростить повторное использование функциональности и уменьшить количество ошибок, вызванных дублированием исходного кода, который становится немного другим из-за изменений обслуживания.
Обычно специальная директива, такая как include
или require
используется для вставки копии содержимого файла заголовка в определенную строку исходного файла во время обработки исходного кода компилятором или обработчиком сценариев. Концепция - этоinclude
или require
директива заменяется содержимым файла заголовка. Заголовочные файлы используются в ряде языков программирования, таких как C и C++, а также в PHP, Ruby и Lua. Семантика этих директив будет варьироваться от языка программирования к языку программирования.
В import
директива, используемая в таких языках, как Java и Go, отличается от директивы include
Директива C и C++ является скорее способом установления связей и ссылок между классами и пакетами как часть объединения программных компонентов (Java и Go), а не включения строк исходного кода (C, C++ и PHP).
Строки исходного кода, обычно помещаемые в файлы заголовков, представляют собой определения и объявления, которые необходимы в нескольких файлах. Информация может включать в себя определения или объявления классов, прототипы функций или определения / объявления структур или константы различных типов.
Рекомендации для файлов заголовков
При определении того, какой источник поместить в файл заголовка, основное практическое правило состоит в том, что это должны быть строки исходного кода, которые можно включать в несколько файлов, не вызывая проблем. Например, в языке программирования C определениеstruct
уместно в файле заголовка.
Однако размещение определения стандартной (не встроенной) функции в заголовочный файл C нецелесообразно. Проблема с помещением стандартного определения функции C в файл заголовка заключается в том, что функция будет дублироваться в каждой точке, где файл заголовка переносится в исходный файл. Результатом будет несколько определений одной и той же функции, вызывающих ошибку компоновщика.
Некоторые языки программирования требуют осторожности, чтобы заголовочный файл не был включен более одного раза. Это может произойти, когда несколько файлов заголовков, которые включены в исходный файл, сами включают еще один файл заголовка. В языках программирования C и C++ макросы или прагмы используются для принудительного применения единого правила. В других случаях исходные строки в файле заголовка могут не требовать однократного правила из-за природы источника в файле заголовка.
Также необходимо позаботиться о том, чтобы цикл зависимости не создавался, вызывая бесконечный цикл во время обработки файлов заголовков. Файл заголовка может включать другие файлы заголовков, которые в конечном итоге включают исходный файл заголовка, снова вызывая цикл или бесконечный цикл, пока компилятор не исчерпает ресурсы во время обработки файла заголовка.
PHP имеет require_once
директива, которая будет проверять, был ли уже включен файл заголовка или нет.
В C и C++ внешняя утилита, препроцессор, обрабатывает макрос и другие директивы, такие как include
директива для файлов заголовков, создающих временный файл, который затем компилируется. На других языкахinclude
обработка директив встроена в компилятор или скриптовый движок.
Обычно расширение файла .h
используется для файлов заголовков. Однако для многих языков программирования это соглашение об именах не является требованием для правильной обработки.