Я отвечаю на это как напоминание, чтобы указать на мой комментарий (и) к "user1949346" ответу на тот же самый ОП.
Так что многие уже ответили: в любом случае это хорошо.
Далее следуют акценты своих впечатлений.
Вступительное слово, как и в предыдущих названных комментариях, по моему мнению, C++
расширение заголовка предлагается равным .h
, если на самом деле нет причин против него.
Поскольку в документах ИСО / МЭК используется это обозначение заголовочных файлов, и в их языковой документации о 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'
символов и в зависимости от того, должно ли оно быть включено в <>
, оно не может содержать >
.
Или другой способ, если он включен в ""
- включается, что он не может содержать "
.
Другими словами: если у вас была среда, поддерживающая имена файлов, такие как 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
.
2 Конечно, я не могу сказать, что принесут с собой некоторые будущие версии!