Заголовки файлов стихов Библиотеки - PullRequest
0 голосов
/ 18 октября 2019

Я знаю, что между заголовочными файлами и библиотеками много различий, но можно ли с уверенностью сказать, что библиотеки содержат скомпилированный код, а заголовочные файлы - нет?

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Можно ли с уверенностью сказать, что библиотеки содержат компилируемый код, а заголовочные файлы - нет?

Не совсем.

Вам необходимо различать два разных формата библиотеки:

  • статические / динамические библиотеки : эти библиотеки уже скомпилированы, они не содержат скомпилированный код.

  • библиотеки исходного кода : эти библиотеки содержат исходный код, который необходимо скомпилировать.

В категории библиотеки исходного кода вы можете найти все виды форматов / конструкций- не в последнюю очередь из них является библиотека заголовков с одним файлом .

Существует множество библиотек с одним заголовком в дикой природе. Эти библиотеки заголовков будут содержать (или создавать) код .

0 голосов
/ 19 октября 2019

Библиотеки содержат скомпилированный объектный код (не "компилируемый код" - это будет файл .c). Библиотека представляет собой упакованную коллекцию объектных модулей.

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

Обычно я говорю, потому что #include не является частью языка C, а скорее директивой препроцессора (как любая строка, начинающаяся с # в C). Препроцессор вставляет содержимое #include 'ed-файла перед передачей его самому компилятору, так что фактически он может содержать любой допустимый код, но это часто вызывает проблемы при связывании с другим кодом, который также может включать тот же самый кодheader.

Это не вопрос "библиотек против заголовков", поскольку они служат совершенно другим целям и участвуют в разных концах процесса pre-process -> compile -> link. Библиотека обычно имеет связанный заголовочный файл, содержащий объявления ее открытых (внешних) интерфейсов.

...