Нет никакого преимущества для какого-либо конкретного расширения, кроме того, что оно может иметь другое значение для вас, компилятора и / или ваших инструментов. header.h
является действительным заголовком. header.hpp
является действительным заголовком. header.hh
является действительным заголовком. header.hx
является действительным заголовком. h.header
является действительным заголовком. this.is.not.a.valid.header
- допустимый заголовок для отказа. ihjkflajfajfklaf
является действительным заголовком. Пока имя может быть правильно проанализировано компилятором и файловая система поддерживает его, это допустимый заголовок, и единственным преимуществом его расширения является то, что в него читается.
Тем не менее, возможность точно делать предположения на основе расширения очень полезна, поэтому было бы разумно использовать легко понятный набор правил для ваших заголовочных файлов. Лично я предпочитаю делать что-то вроде этого:
- Если уже существуют какие-либо установленные правила, следуйте им, чтобы избежать путаницы.
- Если все исходные файлы в проекте написаны на одном языке, используйте
.h
. Там нет двусмысленности.
- Если некоторые заголовки совместимы с несколькими языками, а другие совместимы только с одним языком, расширения основаны на наиболее ограничивающем языке, с которым совместим заголовок. Заголовок, совместимый с C или обоими C & C ++, получает
.h
, в то время как заголовок, совместимый с C ++, но не C, получает .hpp
или .hh
или что-то в этом роде.
Это, конечно, всего лишь один из многих способов обработки расширений, и вы не обязательно можете доверять своему первому впечатлению, даже если все кажется простым. Например, я видел упоминание об использовании .h
для обычных заголовков и .tpp
для заголовков, которые содержат только определения для шаблонных функций-членов класса, с файлами .h
, которые определяют шаблонные классы, включая файлы .tpp
, которые определяют их функции-члены (вместо заголовка .h
, непосредственно содержащего как объявление функции, так и определение). В качестве другого примера, многие люди всегда отражают язык заголовка в его расширении, даже если нет никакой вероятности двусмысленности; для них .h
всегда является заголовком C, а .hpp
(или .hh
, или .hxx
и т. д.) всегда является заголовком C ++. И опять же, некоторые люди используют .h
для «заголовка, связанного с исходным файлом» и .hpp
для «заголовка со всеми встроенными функциями».
Учитывая это, главное преимущество будет заключаться в последовательном именовании ваших заголовков в одном стиле и обеспечении того, чтобы этот стиль был легко понятен любому, кто изучает ваш код. Таким образом, любой, кто знаком с вашим обычным стилем кодирования, сможет определить, что вы имеете в виду под любым расширением, просто беглым взглядом.