Я знаю, до того, как вы выкроите свои язвительные комментарии, это вопрос нуби. Я впервые использую язык Си.
Я студент, изучающий Objective C для компьютерного курса по разработке мобильных приложений. Я знаю, что в академической обстановке многие реальные соображения не нужны, поскольку вы создаете небольшие проекты, работаете в небольших командах и т. Д.
Но наш профессор требует - и XCode поддерживает - заголовочные файлы .h для каждого файла реализации .m. Для меня это похоже на занятую работу. Я должен убедиться, что я копирую каждую сигнатуру метода и переменную экземпляра в другой файл. Если я изменяю один файл, я должен убедиться, что он соответствует другому файлу. Кажется, что это просто куча маленьких неприятностей.
Но я знаю, что для заголовочных файлов должно быть какое - то реальное использование. Отличный ответ будет касаться обоих:
- Для чего нужен заголовочный файл, для которого файл реализации не подходит? Какова его цель?
- Почему мы, программисты, должны вручную писать наши заголовочные файлы? Кажется, что они могут быть легко созданы автоматически.
Заранее спасибо!
источник
Ответы:
Вкратце;
Заголовочный файл определяет API для модуля. Это список контрактов, методы которого могут вызывать третьи стороны. Модуль можно считать черным ящиком для третьих лиц.
Реализация реализует модуль. Это внутренняя часть черного ящика. Как разработчик модуля вы должны написать это, но как пользователь стороннего модуля вам не нужно ничего знать о реализации. Заголовок должен содержать всю необходимую информацию.
Некоторые части файла заголовка могут быть сгенерированы автоматически - объявления методов. Это потребует от вас аннотирования реализации, поскольку в реализации могут быть частные методы, которые не являются частью API и не входят в заголовок.
Заголовочные файлы иногда содержат другую информацию; определения типов, определения констант и т. д. Они находятся в заголовочном файле, а не в реализации.
источник
Основная причина для заголовка заключается в том, что
#include
он может использоваться в каком-то другом файле, поэтому вы можете использовать функции в одном файле из этого другого файла. Заголовок включает в себя (только) достаточно, чтобы иметь возможность использовать функции, а не сами функции, поэтому (мы надеемся) его компиляция происходит значительно быстрее.Поддержание двух отдельно взятых результатов - никто никогда не писал редактор, который очень хорошо автоматизирует процесс. На самом деле не так много причин, по которым они не могли этого сделать, и некоторые из них даже пытались это сделать, но редакторы, которые так делали, никогда не преуспевали на рынке, и более популярные редакторы не приняли его.
источник
Включение заголовка позволяет вашему коду вызывать функции или методы, которые написаны в другом месте и которые могут быть или не быть частью вашего программного проекта / сборки, но которые могут быть найдены «компоновщиком» при сборке программного обеспечения.
Например, когда вы вызываете функцию в стандартной C-библиотеке, вам не нужно помещать все внутренности этой функции в ваш проект - вы просто ожидаете, что ваша программа сможет вызывать ее.
Но вашему компилятору нужно сказать, что функция где-то существует, даже если она не может видеть код, и это делает заголовок. Когда компилятор завершает работу, вызывается компоновщик, и он пытается «связать» те биты вашего кода, которые остаются висящими, например, вызовы библиотеки.
источник
Заголовочные файлы в основном используются для объявления и включения подписей (т. Е. Имени функции, возвращаемого значения и аргументов) ваших функций в другие файлы. Компилятор должен знать эти подписи при компиляции и компоновке ваших файлов.
Прочитайте эту статью для получения дополнительной информации.
источник