Я занимаюсь avr, и у меня возникает вопрос, когда вы создаете библиотеку, которая лучше сделать заголовочный файл, содержащий декларации функций и файл ac, которые содержат код (определения функций), или просто сделать только заголовочный файл, который содержит оба заявление и определение функцийсоздание библиотек
ответ
этих два варианта, применимых в различных ситуациях:
- Если вы пишете библиотеку шаблонов в C++, заголовок только вариант хорош, потому что ваши библиотека не имеет компонента link-time. Вот как распределяется значительная часть стандартной библиотеки C++ (ранее известной как STL).
- Если вы пишете библиотеку C-стиля или библиотеку классов C++, только заголовок не является вариантом. Вы должны отделить заголовок от реализации, скомпилировать реализацию в связующую библиотеку и распространить заголовок, который идет с ним. В противном случае, в том числе один и тот же заголовок с определениями в нескольких единицах перевода, приведет к ошибкам времени связывания из-за дублирования определений.
Файл заголовка включает только прототип, являющийся декларацией определения, включая как переменную, так и функцию. Он может быть включен многими другими файлами.
Определение функции - это реализация, и она должна быть только одной.
Если вы поместите определение функции в файл заголовка и включаете несколько файлов C, во время фазы компилятора будет возникать ошибка определения, особенно во время ссылки для нескольких объектов (включая это определение функции) в один конечный объект.
Существует один случай для встроенной функции, который должен быть помещен в заголовочные файлы, поскольку он расширен во время фазы компилятора и встроен в функцию вызывающего абонента, поэтому компилятор должен знать реализацию во время компилятора, включив этот заголовочный файл.
- 1. Создание библиотек в подпапке
- 2. Создание статических библиотек
- 3. Создание 64-битных библиотек
- 4. Создание разделяемых библиотек Grails
- 5. Создание внешних Javascript-библиотек
- 6. Создание библиотек для Arduino
- 7. Создание автономных библиотек
- 8. Создание общих библиотек для Ada
- 9. Создание общих библиотек в PHP
- 10. Создание .exe, для которого нет библиотек DLL или библиотек
- 11. Создание клиентских библиотек java с помощью Enunciate
- 12. Создание простых в использовании статических библиотек Cocoa
- 13. Создание нескольких библиотек из общей кодовой базы
- 14. Создание нескольких разделяемых библиотек с одним Makefile
- 15. Создание библиотек из машиночитаемых спецификаций в Haskell
- 16. Создание статической библиотеки статических библиотек в XCode
- 17. Создание и использование библиотек биткодов LLVM
- 18. Создание общих объектных файлов из существующих библиотек
- 19. Создание внешних библиотек с помощью cmake
- 20. Создание статических библиотек: как изменить целевое местоположение?
- 21. Создание библиотек OpenCV из исходных файлов
- 22. создание статической версии библиотек Poco C++
- 23. Создание/использование пользовательских библиотек VBA в Excel
- 24. Создание библиотек и разрешений с SharePoint Powershell
- 25. Создание библиотек с JavaScript - ES 6
- 26. Создание разделяемых библиотек между платформами C#
- 27. создание интерфейсов для издевательских библиотек dotnet
- 28. Создание диаграммы с использованием JS-библиотек
- 29. Создание библиотек Qt для VS2012 runtime - update
- 30. Создание библиотек и устранение проблем с компоновщиками
Не помещайте функции в файлы заголовков. Их почему-то называют __header files__. –
Ваш вопрос делает фундаментальную ошибку. Он предполагает, что между этими двумя подходами нет никакой разницы. Это неправда. Есть серьезные последствия, кодовые, и вам нужно их полностью понять, чтобы принять разумное решение. –
В любом случае ваши предложения связаны с созданием * библиотеки *. Это просто вопрос отдельной компиляции и связывания с одной единицей перевода. Почему помечены вложенные? Вопрос полностью общий. – Clifford