В чем разница между заголовочным файлом и библиотекой?
одна из вещей, которую мне трудно понять, - это то, как работает компилятор. У меня с этим много трудностей, но в частности я продолжаю путать заголовки и библиотеки. Если бы кто-нибудь мог немного прояснить ситуацию, это было бы здорово.
15 ответов:
подумайте о том, как это (отказ от ответственности: это действительно аналогия высокого уровня ;) ..
- The заголовок это номер телефона, который вы можете позвонить, в то время как...
- ...элемент библиотека это фактический человек, которого вы можете достичь там!
это фундаментальное различие между "интерфейсом" и "реализацией";интерфейс (заголовок) говорит вам как чтобы вызвать некоторые функции (не зная, как это работает), в то время как реализация (библиотека) - это фактическая функциональность.
Примечание: концепция настолько фундаментальна, потому что она позволяет вам гибкость: вы можете иметь один и тот же заголовок для разных библиотек (т. е. функциональность точно так же называется), и каждая библиотека может реализовать функциональность по-другому. Сохраняя тот же интерфейс, вы можете заменить библиотеки без изменения код код.
и: вы можете изменить реализацию библиотеки, не нарушая код вызова!
A файл и вообще используется для определения интерфейса или набора интерфейсов в приложении. Подумайте о заголовочном файле как о чем-то, что показывает внешнюю функциональность программы, опуская технические детали реализации.
например, если вы оптимизируете программу, вы, скорее всего, измените исходный код (.cpp) файл для улучшения алгоритма, но файл заголовка не изменится, потому что внешние клиенты все еще вызывают методы, использующие один и тот же набор параметров и возвращаемых значений.
в объектно-ориентированном языке, таком как C++, файл заголовка обычно включает следующее:
- описание класса и иерархия наследования
- члены и типы данных класса
- методы класса
хотя ничто не мешает коду быть реализованным в заголовочном файле, это обычно не приветствуется, поскольку это может ввести дополнительную связь и зависимости в коде.
в некоторых случаях (например, шаблонные классы) реализация должны определяется в заголовочном файле по техническим причинам.
A библиотека - это набор кода, который вы хотите сделать доступным для программы или группы программ. Она включает в себя реализация конкретного интерфейс или набор интерфейсов.
код определяется в библиотеке для предотвращения кода дублирование и поощрение повторного использования. Библиотека может быть статически связан (.Либ) или динамически подключаемых (.dll):
A статически связан библиотека определяет набор символов экспорта (которые можно рассматривать как определения методов), которые затем связываются с конечным исполняемым файлом (.exe) на этапе связывания процесса сборки. Он имеет преимущество более быстрого времени выполнения (так как библиотека не должна быть динамически загружается), за счет большего двоичного файла (поскольку методы по существу реплицируются в исполняемый файл).
A динамически подключаемых библиотека связана во время выполнения программы, а не связывание программы. Это полезно, когда несколько программ должны повторно использовать одни и те же методы, и широко используется в таких технологиях, как COM.
одна вещь, которая может сбить вас с толку является то, что слово библиотека может иметь несколько значений в C++. Одно значение было хорошо обсуждено здесь:
связываемый набор функций в двоичном файле. Они могут быть статически или динамически связаны.
но есть и другой тип библиотеки: так называемые header-only библиотеки (включая части STL, TR1 и Boost). Они не существуют в отдельной двоичной форме, поэтому слово библиотека тут не ссылайтесь на конкретный двоичный файл, а скорее на набор включенных заголовочных файлов.
надеюсь, что это помогает.
библиотека-это код, скомпилированный в набор объектных файлов. Объектные файлы содержат скомпилированный машинный код и объявления данных, используемые кодом.
файл заголовка определяет интерфейс в библиотеку: он говорит вам, как правильно использовать библиотеку. В C/C++ файл заголовка дает вам список имен функций и способов вызова этих функций: количество и типы параметров, которые они принимают, тип возвращаемого значения, соглашение о вызове и т. д. Заголовочные файлы имеют много других вещей в них тоже, но в конце концов, то, что он сводится к набору правил для вызова кода библиотеки.
Если библиотека на языках программирования является общей библиотекой, то многие книги, присутствующие в библиотеке, можно сравнить с функциями/методами на языках . А также заголовочные файлы можно сравнить с номером строки книги Предположим , что в какой-то библиотеке в Хайдарабаде есть книга, и в этой библиотеке эта книга присутствует в строке № 24 ... Точно так же адрес библиотеки задается с помощью пространства имен std (для стандартной библиотеки), а строка No задается заголовочным файлом, где все книги (методы в данном случае) того же времени(все методы, связанные с потоками ввода/вывода) выставляются
заголовочный файл описывает Как вызвать функцию библиотека содержит скомпилированный код, который реализует эту функцию.
заголовочный файл-это тот, в котором объявление функции written.By с помощью файла заголовка мы можем получить доступ к определенной функции
пока
файл библиотеки - это файл, в котором записано определение конкретной функции. МАТЕМАТИКА.H-это файл заголовка в то время как математика.LIB-это файл библиотеки.
работа заголовочного файла и библиотеки в программе.
A файл содержит ссылки на библиотеки(библиотеки содержат стандартные функции и методы), компилятор распознает стандартные функции, используемые в исходном коде через препроцессор, который разрешает все директивы (директивы-это строки в программе, которым предшествует знак#, которые включают ) перед фактической компиляцией программы.
спасибо читаю!
Я думаю, что библиотека как пакет кода, который повторно используется много раз , и этот код предварительно скомпилирован, поэтому он доступен в стандартной форме, так что нам не нужно писать этот код для каждой программы, которую мы разрабатываем . И заголовочный файл содержит ссылку на этот код простым способом функции ,которые мы используем в нашей программе, такие как "cin" и "cout", полностью определены в стандартной библиотеке, а заголовочные файлы, такие как файл заголовка iostream, содержат ссылку на этот код. Поэтому, когда мы компилируем наши мы просто получаем предварительно скомпилированный код для cin и cout, и нам не нужно писать код для cin и cout каждый раз, когда мы его используем. Или более простым способом мы можем сказать, что библиотека содержит коды для всех функций, а файл заголовка-это способ достичь этого кода.
библиотека представляет собой набор подобных объектов для случайного использования . Он обычно содержит программы в виде объектного или исходного кода, шаблоны и т. д.
файл заголовка-это расположение (интерфейс) библиотеки
перефразируя классическую шутку, разница заключается в том, что библиотека имеет файл заголовка, а файл заголовка не имеет библиотеки.
библиотеки как мертвые мумии,завернутые в белые длинные нити. Они мертвы. Единственный способ освободить их через заголовочные файлы. Заголовочные файлы содержат способы их оживления, и они могут быть оживлены много раз(повторное использование кода).
вы можете рассмотреть этот пример, чтобы понять -
Math.h- Это заголовочный файл, который включает в себя прототипом для вызова функции, какsqrt(),pow()и т. д., В то время какlibm.lib,libmmd.lib,libmmd.dllнекоторые из математических библиотек. Проще говоря, файл заголовка похож на визитную карточку, а библиотеки-на реального человека, поэтому мы используем визитную карточку(файл заголовка), чтобы добраться до фактического человека(библиотеки).
код из библиотек будет храниться только по мере необходимости для файла заголовка. Весь файл заголовка будет сохранен, что экономит область хранения процессора.
Comments