Мені важко зрозуміти, як працює компілятор. Я маю багато труднощів з цим, але, зокрема, я постійно змішую заголовки та бібліотеки. Якби хтось зміг трохи прояснити ситуацію, це було б чудово.
Мені важко зрозуміти, як працює компілятор. Я маю багато труднощів з цим, але, зокрема, я постійно змішую заголовки та бібліотеки. Якби хтось зміг трохи прояснити ситуацію, це було б чудово.
Відповіді:
Подумайте про обидва так (Застереження: це дійсно аналогія високого рівня;) ..
Це принципова різниця між "інтерфейсом" та "реалізацією"; інтерфейс (заголовок) говорить вам , як назвати деякі функціональні можливості (не знаючи , як це працює), в той час як реалізація (бібліотека) є фактичною функціональністю.
Примітка: Концепція настільки фундаментальна, оскільки вона дозволяє вам гнучко: ви можете мати один і той же заголовок для різних бібліотек (тобто функціональність точно викликається однаково), і кожна бібліотека може реалізовувати функціональність по-різному. Зберігаючи той самий інтерфейс, ви можете замінити бібліотеки, не змінюючи свій код.
І: ви можете змінити реалізацію бібліотеки, не порушуючи викличний код!
Util.libЯк я називаю це функцією? Чи потрібно мені включати файли заголовків, які також стосуються U til.lib?
Заголовки буде в основному використовується для визначення інтерфейсу або набору інтерфейсів в додатку. Подумайте про файл заголовка як про те, що відображає зовнішню функціональність програми, опускаючи технічні деталі реалізації.
Наприклад, якби ви оптимізували програму, швидше за все, ви б модифікували вихідний файл (.cpp) для вдосконалення алгоритму, але файл заголовка не змінився б, оскільки зовнішні клієнти все одно викликають методи з однаковим набором параметрів і повернути значення.
В об'єктно-орієнтованій мові, як C ++, заголовочний файл, як правило, містить наступне:
Незважаючи на те, що ніщо не заважає реалізації коду у файлі заголовка, це, як правило, не надається перевагу, оскільки воно може ввести додаткове зчеплення та залежності в коді.
У деяких випадках (наприклад, шаблонні класи) реалізація повинна бути визначена у файлі заголовка з технічних причин.
Бібліотека являє собою набір коду , який ви хочете зробити доступним для програми або групи програм. Він включає реалізацію певного інтерфейсу або набору інтерфейсів.
Код визначається в бібліотеці, щоб запобігти дублюванню коду та заохотити повторне використання. Бібліотека може бути статично (.lib) або динамічно (.dll):
Статично пов'язані бібліотеки визначає набір символів експорту (які можна розглядати в якості визначень методів) , які потім пов'язані в кінцевий виконуваний файл (.exe) під час зв'язує стадії процесу складання. Він має перевагу у швидшому виконанні (оскільки бібліотеку не потрібно динамічно завантажувати), за рахунок більшої двійкової системи (оскільки методи по суті реплікуються у виконуваному файлі).
Динамічно пов'язана бібліотека пов'язана під час виконання програми, а не пов'язання програми. Це корисно, коли для кількох програм потрібно повторно використовувати однакові методи і широко використовується в таких технологіях, як COM.
Вас може бентежити те, що бібліотека слів може мати кілька значень у C ++. Тут добре обговорено одне значення:
Набір функцій у двійковому файлі. Вони можуть бути статично пов’язані або динамічно пов’язані.
Але існує і інший тип бібліотеки: так звані бібліотеки лише для заголовків (включаючи частини STL, TR1 та Boost). Вони не існують в окремій двійковій формі, тому бібліотека слів посилається не на певний двійковий файл, а на набір включених файлів заголовків.
Сподіваюся, це допомагає.
Бібліотека - це код, компільований у набір об’єктних файлів. Файли об’єктів містять скомпільований машинний код та декларації даних, що використовуються кодом.
Файл заголовка визначає інтерфейс бібліотеки: він розповідає, як правильно користуватися бібліотекою. У C / C ++ файл заголовка надає вам перелік назв функцій та способи виклику цих функцій: кількість та типи параметрів, які вони приймають, тип повернення, умова викликів тощо. У файлах заголовків є багато іншого їх теж, але врешті-решт, це зводиться до набору правил для виклику коду бібліотеки.
Заголовок містить лише оголошення, тоді як бібліотеки також містять реалізацію.
Якщо Бібліотека мовами програмування є загальною бібліотекою, то багато книг, присутніх у бібліотеці, можна порівняти з функціями / методами мов. А також файли заголовків можна порівняти з номером рядка книги. Припустимо, є книга в якійсь бібліотеці в Хайдарабаді і в цій бібліотеці ця книга присутня в рядку № 24 ... Так само, як вказана адреса бібліотеки за допомогою простору імен std (для стандартної бібліотеки) і рядок No задається файлом заголовка, де виставляються всі книги (в даному випадку методи) (всі методи, пов'язані з потоками вводу / виводу)
Заголовок зазвичай використовується для зберігання прототипів. Заголовки розширюються під час попередньої обробки, так що під час компіляції код може мати доступ до відповідних оголошень / прототипів функцій.
Бібліотека - це власне програмне забезпечення, яке містить визначення прототипів функцій (наявних у заголовку). Бібліотека використовується під час посилання. Визначення (наявні в бібліотеці) вирішуються під час посилання.
Файл заголовка описує, як викликати функціонал , бібліотека містить скомпільований код, який реалізує цю функціональність.
Робота файлу HEADER та БІБЛІОТЕКИ в програмі.
Заголовки містить посилання на бібліотеки (бібліотеки містять стандартні функції і методи), компілятор розпізнає стандартні функції , які використовуються в вихідному коді через препроцесор, який вирішує всі директиви (директиви рядок в програмі передує знак # , які включають ) перед фактичним складанням програми.
Дякуємо за читання!
Я думаю, що бібліотека - це пакет коду, який багаторазово використовується багато разів, і цей код попередньо скомпільований, отже, він доступний у стандартній формі, тому нам не потрібно писати цей код для кожної програми, яку ми розробляємо. І файл заголовка містить посилання на цей код простим способом, функції, які ми використовуємо в нашій програмі, такі як "cin" і "cout", повністю визначені в стандартній бібліотеці, а файли заголовків, такі як файл заголовка iostream, містять посилання на цей код. Отже, коли ми компілюємо наш код, ми просто отримуємо попередньо скомпільований для cin і cout, і нам не потрібно писати код для cin і cout щоразу, коли ми його використовуємо. Або більш простим способом ми можемо сказати, що бібліотека містить коди для всіх функцій, а файл заголовка - це спосіб досягти цього коду.
Бібліотека - це колекція подібних предметів для випадкового використання. Зазвичай він містить програми у формі об’єкта або вихідного коду, шаблони тощо.
Файл заголовка - це місце розташування (інтерфейс) бібліотеки
Перефразовуючи класичний жарт, різниця полягає в тому, що бібліотека має файл заголовка, тоді як файл заголовка не має бібліотеки.
Бібліотеки схожі на мертві мумії, обмотані білими довгими нитками. Вони мертві. Єдиний спосіб їх випустити - це заголовні файли. Файли заголовків містять способи, як оживити їх, і їх можна оживити багато разів (повторне використання коду).
Ви можете розглянути цей приклад зрозуміти- Math.hфайл заголовка , який містить прототип для викликів функцій , таких як sqrt(), і pow()т.д., в той час як libm.lib, libmmd.lib, libmmd.dllдеякі з математичних бібліотек. Якщо говорити простими словами, файл заголовка схожий на візитну картку, а бібліотеки - як справжня людина, тому ми використовуємо візитну картку (файл заголовка), щоб дістатись до фактичної особи (Бібліотеки).
Код із бібліотек зберігатиметься лише за необхідністю для заголовного файлу. Буде збережено весь файл заголовка, що економить область зберігання процесора.