В чем разница между заголовочным файлом и файлом библиотеки? - PullRequest
2 голосов
/ 04 мая 2020

Я действительно запутался в этом. Я не могу понять, как код из файлов библиотеки связан с файлом заголовка. Кто-нибудь может мне помочь?

Ответы [ 2 ]

4 голосов
/ 04 мая 2020

Забудьте на секунду о файлах заголовков и посмотрите на следующую программу:

// Forward declare foo()
void foo();

int main() {
  foo();
  return 0;
}

Я могу скомпилировать эту программу нормально, но если я попытаюсь связать ее, я получу сообщение об ошибке строки:

Мне обещали, что функция с именем foo() существует, но я нигде не могу ее найти.

Теперь, если я свяжу ту же программу против библиотеки, которая предоставляет функцию foo(), тогда все будет в порядке.

Заголовок - это просто формальный способ упаковки всех предварительных объявлений библиотеки (и некоторых других вещей) способом который точно документирует содержимое библиотеки. Но это всего лишь условность. Пока предварительные объявления видны компилятору из где-то , это все, что действительно требуется.

Помните: #include "path/to/file.h" буквально означает «скопировать и вставить содержимое этого файла сюда. . "

Это почти то же самое, что и моя исходная программа:

//foo.h
void foo();
//main.cpp

#include "foo.h"

int main() {
  foo();
  return 0;
}
1 голос
/ 04 мая 2020

Файлы .lib содержат весь код каждой функции, которая была помещена в них. Заголовочный файл содержит объявления функций, чтобы компилятор знал, что это за функции.

Если у вас есть следующая функция в файле библиотеки:

int myFunction(char c, int a) {
    //... Do something
}

Заголовочный файл будет содержать объявление : int myFunction(char c, int a) Файл .lib будет содержать //... Do something part

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

Для получения дополнительной информации:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...