Краткое содержание: Вы можете, но не должны.
Код C и C ++ предварительно обработан до его компиляции: все заголовки "вставляются" висходные файлы, которые включают их, рекурсивно.Если вы определите функцию в заголовке, и она будет включена в два файла C, вы получите две копии в каждом объектном файле ( Одно правило определения нарушение).
Вы можете создатьC-библиотеки «только для заголовков», если все ваши функции помечены как static
, то есть не видны за пределами модуля перевода.Но это также означает, что вы получите копию всех статических функций в каждом модуле перевода, который включает файл заголовка.
В C ++ это немного отличается: встроенные функции не являются static
, символы, испускаемыекомпилятор все еще виден компоновщику, но компоновщик может отбрасывать дубликаты, вместо того, чтобы сдавать («слабые» символы).
Нетрудно писать код C в заголовках, если он не основан на макросах (например,queue(3)
).В C ++ основной причиной сохранения кода в заголовках являются шаблоны, что может привести к созданию экземпляра кода для различных параметров шаблона, что неприменимо к C.