Я отвечаю на это как напоминание, чтобы указать на мои комментарии к ответу "user1949346" на этот же OP.
Итак, как многие уже ответили: в любом случае все в порядке. Далее следует акцент на собственных впечатлениях.
Вводный, как и в предыдущих упомянутых комментариях, я считаю, что C++
расширения заголовков предлагается быть .h
, если на самом деле нет причин против этого.
Поскольку в документах ISO / IEC используется эта нотация файлов заголовков, и в документации на их языке о C++
даже не встречается строка, соответствующая .hpp
.
Но теперь я стремлюсь к обоснованной причине, ПОЧЕМУ в любом случае это нормально, и особенно почему это не является предметом самого языка.
Итак, поехали.
Документация C++
(на самом деле я ссылаюсь на версию N3690) определяет, что заголовок должен соответствовать следующему синтаксису:
2.9 Имена заголовков
header-name:
< h-char-sequence >
" q-char-sequence "
h-char-sequence:
h-char
h-char-sequence h-char
h-char:
any member of the source character set except new-line and >
q-char-sequence:
q-char
q-char-sequence q-char
q-char:
any member of the source character set except new-line and "
Итак, как мы можем извлечь из этой части, имя файла заголовка может быть любым, что также является допустимым в исходном коде. За исключением символов '\n'
и в зависимости от того, должен ли он быть включен <>
, он не может содержать >
. Или наоборот, если он включен ""
-include, он не может содержать "
.
Другими словами: если у вас была среда, поддерживающая такие имена файлов, как prettyStupidIdea.>
, включите, например:
#include "prettyStupidIdea.>"
будет действительным, но:
#include <prettyStupidIdea.>>
будет недействительным. Наоборот примерно так же.
И даже
#include <<.<>
будет допустимым включаемым именем файла заголовка.
Даже это соответствовало бы C++
, хотя это было бы довольно глупой идеей.
И поэтому .hpp
тоже верно.
Но это не результат комитетов, разрабатывающих решения для языка!
Поэтому обсуждение использования .hpp
аналогично обсуждению .cc
, .mm
или чего-либо еще, что я читал в других сообщениях по этой теме.
Должен признать, я понятия не имею, откуда .hpp
взялось из 1, но готов поспорить, что изобретатель какого-то инструмента синтаксического анализа, IDE или чего-то еще, связанного с C++
, пришел к этой идее, чтобы оптимизировать некоторые внутренние процессы или просто изобретать некоторые (возможно, даже для них обязательно) новые соглашения об именах.
Но это не часть языка.
И всякий раз, когда кто-то решит использовать это таким образом. Может быть, потому, что ему это нравится больше всего или потому, что это требуется для некоторых приложений рабочего процесса, это никогда не 2 является требованием языка. Так что тот, кто говорит, что «pp - это потому, что он используется с C ++», просто ошибается в отношении определения языков.
C ++ допускает все, что касается предыдущего абзаца. И если есть что-то, что комитет предложил использовать, то он использует .h
, поскольку это расширение, на которое предъявляются иски во всех примерах документа ISO.
Вывод:
Пока вы не видите / не чувствуете необходимости использовать .h
вместо .hpp
или наоборот, вам не стоит беспокоиться. Потому что оба будут формировать допустимое имя заголовка того же качества по отношению к стандарту. И поэтому все, что ТРЕБУЕТ использовать .h
или .hpp
, является дополнительным ограничением стандарта, которое может даже противоречить другим дополнительным ограничениям, не соответствующим друг другу. Но поскольку OP не упоминает никаких дополнительных языковых ограничений, это единственный правильный и приемлемый ответ на вопрос.
«* .h или * .hpp для определений ваших классов»:
Оба одинаково верны и применимы до тех пор, пока отсутствуют внешние ограничения.
1 Насколько я знаю, очевидно, что это .hpp
расширение придумал именно фреймворк boost.
2 Конечно, я не могу сказать, что принесут с собой некоторые будущие версии!
person
dhein
schedule
08.03.2016