Файл h что это такое

Обновлено: 21.11.2024

При разделении кода на несколько файлов, что именно должно быть в файле .h, а что в файле .cpp?

Это проблема чистого стиля, но я считаю, что объявления C++ помещаются в файл .hpp, а объявления C — в файл .h. Это очень полезно при смешивании кода C и C++ (например, устаревших модулей на C).

12 ответов 12

Файлы заголовков ( .h ) предназначены для предоставления информации, которая потребуется в нескольких файлах. Такие вещи, как объявления классов, прототипы функций и перечисления, обычно находятся в заголовочных файлах. Одним словом, «определения».

Файлы кода ( .cpp ) предназначены для предоставления информации о реализации, которую необходимо знать только в одном файле. В общем, тела функций и внутренние переменные, к которым должны/никогда не будут обращаться другие модули, относятся к файлам .cpp. Одним словом, «реализации».

Самый простой вопрос, который нужно задать себе, чтобы определить, что и где принадлежит: "Если я изменю это, мне придется изменить код в других файлах, чтобы все снова скомпилировалось?" Если ответ «да», он, вероятно, принадлежит заголовочному файлу; если ответ "нет", он, вероятно, принадлежит файлу кода.

Все хорошо, но с неточной терминологией. Одним словом, «декларации» — термин «определение» является синонимом «реализации». В заголовке должен быть только декларативный код, встроенный код, определения макросов и код шаблона; то есть ничего, что создает код или данные.

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

У них есть точное значение в C++, но нет точного значения в английском языке. Мой ответ был написан последним.

Дело в том, что в C++ это несколько сложнее, чем организация заголовка/источника C.

Что видит компилятор?

Компилятор видит один большой исходный файл (.cpp) с правильно включенными заголовками. Исходный файл — это единица компиляции, которая будет скомпилирована в объектный файл.

Итак, зачем нужны заголовки?

Поскольку одной единице компиляции может потребоваться информация о реализации в другой единице компиляции. Таким образом, можно написать, например, реализацию функции в одном источнике и написать объявление этой функции в другом источнике, которому необходимо ее использовать.

В этом случае есть две копии одной и той же информации. Что зло.

Решение состоит в том, чтобы поделиться некоторыми деталями. Хотя реализация должна оставаться в исходном коде, объявление общих символов, таких как функции или определения структур, классов, перечислений и т. д., может потребоваться совместно использовать.

Заголовки используются для размещения этих общих сведений.

Переместите в заголовок объявления о том, что должно быть доступно для нескольких источников

Больше ничего?

В C++ есть и другие вещи, которые можно поместить в заголовок, потому что они тоже должны быть общими:

  • внутренний код
  • шаблоны
  • константы (обычно те, которые вы хотите использовать внутри переключателей.)

Переместить в заголовок ВСЕ, чем нужно поделиться, включая общие реализации

Означает ли это, что внутри заголовков могут быть источники?

Да. На самом деле внутри "заголовка" (т. е. совместно используемого между источниками) может быть много разных вещей.

  • Пересылать объявления
  • объявления/определения функций/структур/классов/шаблонов
  • внедрение встроенного и шаблонного кода

Это становится сложным, а в некоторых случаях (круговые зависимости между символами) невозможно уместить это в одном заголовке.

Заголовки можно разбить на три части

Это означает, что в крайнем случае вы могли бы:

  • заголовок прямого объявления
  • заголовок объявления/определения
  • заголовок реализации
  • источник реализации

Представим, что у нас есть шаблон MyObject. Мы могли бы:

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

Но в других случаях (шаблонные объекты знали друг друга) мне приходилось иметь для каждого объекта отдельные заголовки объявления и реализации с пустым исходным кодом, включая эти заголовки, просто чтобы помочь мне увидеть некоторые ошибки компиляции.

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

Заключение

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

Но в тот день, когда у вас появятся циклические зависимости между шаблонными объектами, не удивляйтесь, если организация вашего кода станет более «интересной», чем простая организация заголовка/источника.

У вас возникли проблемы с открытием файла H или вам просто интересно, что он содержит? Мы объясним, для чего используются эти файлы, и покажем вам программное обеспечение, которое, как мы знаем, может открывать или иным образом обрабатывать ваши файлы.

Что такое файл H?

Файлы с расширением .h обычно представляют собой заголовочные файлы, используемые в языках программирования C или C++. Файлы .h широко известны программистам как «файлы заголовков». Они могут содержать константы, прототипы функций и определения внешних переменных.

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

Как открыть файлы H

Важно: разные программы могут использовать файлы с расширением H для разных целей, поэтому, если вы не уверены, какой формат у вашего файла H, вам может потребоваться попробовать несколько разных программ.

Хотя мы сами еще не проверяли приложения, наши пользователи предложили 10 различных открывателей H, которые вы найдете в списке ниже.

Последнее обновление: 17 марта 2022 г.

Предложить другой формат файла с расширением H

Хотя нам известен один формат файлов с расширением .H, их может быть больше. Широко распространено, что разные программы используют файлы с одним и тем же расширением для очень разных типов данных. Сообщите нам, если вам известны файлы .H другого типа.

Различные приложения, использующие файлы с этим расширением

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

CodeBlocks Отправлено пользователем
Dev-C++ Отправлено пользователем
UltraEdit Отправлено пользователем
Atmel Studio Отправлено пользователем
Code::Blocks Отправлено пользователем
Borland C++ Отправлено пользователем
Edge Code CC Отправлено пользователем
progeCAD Professional Отправлено пользователем
jGRASP Отправлено пользователем
Квадратные скобки Отправлено пользователем

Не уверены, какой тип файла вы пытаетесь открыть? Попробуйте наш новый анализатор файлов. Это бесплатный инструмент, который может идентифицировать более 11 000 различных типов файлов — скорее всего, и ваши! Это поможет вам найти программное обеспечение, которое может обрабатывать файлы определенного типа. Загрузите анализатор файлов здесь.

Читайте также: