С++: причина, почему использование ".hh" в качестве расширения для файлов заголовков С++
Я хотел бы знать, почему мы используем ".hh" как расширение для заголовочных файлов C++, а не просто ".h".
Заголовочные файлы предварительно обрабатываются, и препроцессор даже не заботится о расширении заголовочного файла. Таким образом, даже если я создаю заголовочный файл с расширением ".qwe" (test.qwe). Тогда зачем использовать ".hh" как расширение для заголовочных файлов C++.
Некоторые говорят, что мы используем ".cc" в качестве расширения для файлов C++, чтобы отличать их от файлов C (который имеет расширение ".c"), также мы используем ".hh" в качестве расширения для заголовочных файлов C++ чтобы отличить от заголовочных файлов C (который имеет расширение ".h"). Я не думаю, что это является веской причиной.
Кто-нибудь знает причину именования таким способом?
Ответы
Ответ 1
Некоторые говорят, что мы используем ".cc" в качестве расширения для файлов С++, чтобы отличать от файлов C (с расширением ".c" ), , так же мы используем ".hh" как расширение для С++ заголовочные файлы для отличия от файлов заголовков C (с расширением ".h" ).
Именно по этой причине. Это просто, чтобы отличать заголовки CPP от заголовков C.
Некоторые программисты и библиотеки, такие как Boost, используют .hpp
для заголовков CPP. Мой личный выбор:
- example.c
- example.cpp
- example.h
- example.h ++
Даже если все они принадлежат к огромному проекту, вы все равно можете выяснить, какой именно. Нет описания.
Ответ 2
Вы можете назвать свои заголовки по своему усмотрению, они даже не могут иметь никакого расширения.
В этом FAQ упоминаются соглашения об именах заголовков.
Ответ 3
Это не по какой-либо конкретной причине, это просто соглашение (разработчик или проект). Поскольку "расширение файла" - это просто часть имени, это не имеет большого значения, поскольку исходные файлы - это просто текстовые файлы. Кроме того, заголовочные файлы просто вставляются в файл, который включает их (через #include
, поэтому расширение файла означает для них еще меньше.
Заголовки библиотек Borland имели расширение .hpp
. Стандартные библиотеки стандартной библиотеки С++ не имеют расширения. Это просто вопрос условности и личного вкуса.
Ответ 4
Это полностью соглашение, для этого нет особых причин. Обычно люди стараются оставаться последовательными в рамках проекта, или между командами или даже всей компанией. Это помогает разработчикам, которые забирают ваш код после того, как вы давно поняли, что вы abc.hh отправились с файлом abc.cc, а abc.h идет с abc.c.
Ответ 5
Одна из причин, если я создаю dll, у которого есть C API вокруг кучи кода на С++, мне нужно провести различие между моими заголовками C, которые клиент может использовать для импорта функций C и моих внутренних заголовков С++, которые я явно не хотите, чтобы клиент мог импортировать.
Связывание с функцией C довольно просто из большинства языков/сред с практически без накладных расходов. Вам не нужно думать обо всех сложностях, наследуемых на С++. Поэтому, если бы я работал с такой библиотекой, я бы обязательно отделил свой С++ от моего интерфейса C.
Ответ 6
Я думаю, что это в основном социальное соглашение.
Однако недавние компиляторы GCC могут компилировать (одиночный) заголовок foo.hh
или foo.h
во что-то вроде foo.hh.gch
или foo.h.gch
, который по существу содержит кучное изображение с постоянной памятью компилятора (cc1plus
программа, начатая g++
) после того, как она проанализировала этот заголовок.
Обратите внимание, что стандартная библиотека С++ 11 определяет файлы заголовков, например, например. <vector>
без какого-либо расширения.