2016-11-06 5 views
1

Я пытаюсь изучить использование файлов заголовков в C. Теперь я нашел несколько ресурсов в своих исследованиях, но ни один из них не создал желаемый эффект.Использование файлов заголовков в C

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

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

gcc -o myprog test.c library.c 

Но я не хочу делать что либо. Мои функции библиотеки должны быть легко доступны без необходимости включать в строку компиляции. В соответствии с тем же ответом я мог бы создать библиотеку, а затем связать ее с ключом -l. Но когда дело доходит до таких функций, как printf, вам не нужно делать ни один из них. Все, что вам нужно сделать, это включить файлы заголовков. Есть ли способ сделать это?

резюме для TL; DR

Я хочу написать библиотеку в C, который:

  1. не должен быть реализован в самом файле заголовка.

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

  3. Не нужно связываться с -l каждый раз, когда я использую библиотечную функцию.

  4. В основном библиотека должна использоваться только с использованием файла заголовка.

Есть ли в любом случае, что я мог бы сделать это в Linux?

+0

В старые времена, прежде чем общие библиотеки стали нормой, вы можете добавить свой код в библиотеку системы C. Это никогда не было хорошей идеей; любое обновление в системной библиотеке будет отбрасывать ваши дополнения. Но это можно сделать. В противном случае вам нужно найти способ сконфигурировать ваш компилятор C для запуска компоновщика, чтобы связать вашу библиотеку автоматически, например, автоматически связывает библиотеку системы C. Это, вероятно, возможно; это не стоит усилий. (Опять же, изменения в компиляторе, вероятно, означают, что вы должны вносить изменения каждый раз, когда вы обновляете компилятор.).Вы должны просто использовать '-lwhatever'. –

ответ

2

Но когда дело доходит до таких функций, как printf, вам не нужно делать ни один из них. Все, что вам нужно сделать, это включить файлы заголовков. Есть ли способ сделать это?

Короткий ответ «нет». Долгий ответ заключается в том, что компилятор C связывает некоторые библиотеки «бесплатно», включая библиотеку, которая реализует printf.

У вас есть возможность отказаться от этих «бесплатных» - в gcc это -nodefaultlibs. Если вы добавите этот параметр, printf будет отсутствовать.

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

 Смежные вопросы

  • Нет связанных вопросов^_^