Включить директиву

редактировать
Тип файла в компьютерном программировании

Многие языки программирования и другие компьютерные файлы имеют директива, часто называемая include(иногда copyили import), что приводит к вставке содержимого второго файла в исходный файл. Эти включенные файлы называются тетрадями или заголовочными файлами . Они часто используются для определения физического макета данных программы, фрагментов процедурного кода и / или предварительных объявлений при продвижении инкапсуляции и повторного использования кода.

Содержание

  • 1 Назначение
  • 2 Поддержка языков
    • 2.1 C / C ++
    • 2.2 COBOL
    • 2.3 Fortran
    • 2.4 PHP
    • 2.5 Другие языки
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки

Цель

Директива includeпозволяет разрабатывать библиотеки кода, которые помогают в:

  • гарантировать, что все используют одну и ту же версию определения макета данных или процедурного кода во всей программе,
  • легко делать перекрестные ссылки там, где компоненты используются в системе,
  • легко менять программы при необходимости (необходимо редактировать только один главный файл, вместо изменения каждого экземпляра используется идентичный тип данных или вызывается функция ) и
  • экономят время за счет нет необходимости кодировать обширные макеты данных (незначительные, но полезные).

Пример ситуации, в которой использование директивы include выигрывает, - это обращение к функциям в другом файле. Предположим, у нас есть функция addв одном файле, которая затем объявляется (с прототипом функции ) и затем упоминается во втором исходном файле следующим образом:

int add ( int, int); int тройной (int x) {return add (x, add (x, x)); }

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

#include "add.h" int triple (int x) {return add (x, add ( х, х)); }

Теперь, каждый раз, когда код компилируется, последние прототипы функций из add.hбудут включены в файлы, использующие их, чтобы избежать потенциально катастрофических ошибок.

Поддержка языков

C / C ++

В C и C ++ #includeдиректива препроцессора заставляет компилятор заменять эту строку полным текстом содержимого указанного исходного файла (если он включен в кавычки: "") или именованного заголовка (если включен в угловые скобки : <>); обратите внимание, что заголовок не обязательно должен быть исходным файлом. Включение продолжается рекурсивно для этого включенного содержимого до предела вложенности, определенного реализацией. Заголовки не обязательно должны иметь имена, соответствующие файлам: в стандартных заголовках C ++ обычно используются слова, такие как «вектор», поэтому #include , тогда как в стандартных заголовках C есть идентификаторы в виде имен файлов с Расширение ".h", как в #include . «Исходным файлом» может быть любой файл с именем любой формы, но чаще всего он имеет расширение «.h» и называется «заголовочный файл» (иногда «.hpp» или «.hh», чтобы отличить C ++ заголовки), хотя файлы с расширениями.c,.cc и.cpp также могут быть включены (особенно в методе Single Compilation Unit ), и иногда используются другие расширения.

Эти две формы директивы #includeмогут определять, какой заголовок или исходный файл включать, способом, определяемым реализацией. На практике обычно используется форма угловых скобок для поиска исходных файлов в стандартном системном каталоге (или наборе каталогов), а затем поиск исходных файлов по локальным или специфическим для проекта путям (указанным в командной строке, в переменной среды или в Makefile или другом файле сборки), в то время как форма с кавычками не выполняет поиск в стандартном системном каталоге, а ищет только по локальным или специфическим для проекта путям. В случае отсутствия противоречий форма угловых скобок также может использоваться для указания включений для конкретного проекта, но это считается плохой формой. Тот факт, что заголовки не обязательно должны соответствовать файлам, является в первую очередь технической особенностью реализации и используется для исключения расширения.h при включении стандартных заголовков C ++; в обычном использовании «заголовок» означает «заголовочный файл».

Например:

#include // Включаем содержимое стандартного заголовка 'stdio.h' (возможно, файл 'stdio.h'). #include // Включаем содержимое стандартного заголовка vector (возможно, файл vector.h). #include "user_defined.h" // Включаем содержимое файла user_defined.h.

В C и C ++ проблемы могут возникнуть, если два (или более) включаемых файла по очереди включают один и тот же третий файл. Одно из решений - избегать включения любых других файлов в включаемые файлы, что может потребовать от программиста вручную добавить дополнительные директивы включения в исходный файл. Другое решение - использовать include guards.

COBOL

COBOL (а также RPG IV ), что позволяет программистам копировать тетради в исходный код программы аналогично заголовку файлы, но также позволяет заменять в них определенный текст другим текстом. Ключевое слово COBOL для включения - COPY, а замена выполняется с помощью предложения REPLACING... BY.... Директива include присутствовала в COBOL с COBOL 60, но к 1968 году была изменена с исходного INCLUDEна COPY.

Fortran

Fortran поддерживает сами по себе файлы заголовков не требуются. Однако Fortran 90 и более поздние версии имеют две связанные функции: включают в себяоператоры и модули. Первый может использоваться для совместного использования общего файла, содержащего интерфейсы процедур, во многом как заголовок C, хотя спецификация интерфейса не требуется для всех разновидностей процедур Fortran. Этот подход обычно не используется; вместо этого процедуры обычно группируются в модули, на которые затем можно ссылаться с помощью оператора useв других областях кода. Для модулей информация интерфейса типа заголовка автоматически генерируется компилятором и обычно помещается в отдельные файлы модулей, хотя некоторые компиляторы помещают эту информацию непосредственно в объектные файлы. Сама спецификация языка не требует создания каких-либо дополнительных файлов, хотя интерфейсы процедурных модулей почти повсеместно распространяются таким образом.

PHP

В PHP директива includeвызывает включение и оценку другого файла PHP. Аналогичные команды: require, который при неудачном включении вызовет фатальное исключение и остановит скрипт, и include_onceи require_once, которые заставляет файл не включаться или не требуется снова, если он уже был включен или требовался, избегая проблемы двойного включения C.

Другие языки

Существует множество форм директивы include, например:

  • #include...(C )
  • include...(Fortran, MASM )
  • (HTML SSI )
  • импорт...;(Java )
  • импорт... из...(JavaScript )
  • var... = require ("...")(JavaScript)
  • <%@ include... %>(JSP )
  • {$ I...}(UCSD Pascal, Turbo Pascal )
  • % include...(PL / I )
  • import...(Python )
  • / COPY QCPYLESRC, QBC( RPG IV - первый аргумент - имя файла, второй аргумент - тетрадь)
  • extern crate...;(Rust )

Современные языки (например, Haskell и Java ) стараются избегать копий или включений, предпочитая модули и системы импорта / экспорта для управления пространством имен. Некоторые из этих языков (например, Java и C # ) не используют форвардные объявления, и вместо этого идентификаторы распознаются автоматически из исходных файлов и считываются непосредственно из символов динамической библиотеки (обычно указываются с помощью importили с помощьюdirecti ves), то есть файлы заголовков не нужны.

См. Также

Ссылки

Внешние ссылки

Последняя правка сделана 2021-05-23 13:04:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте