LINUX.ORG.RU

.h или .hpp?

 , ,


1

4

А вы какое расширение используете для заголовочных файлов C++?

По идее, .hpp правильнее, так как .h это всё-таки сишный заголовок и, соответственно, у них могут быть различия.

Использую .h

Пускай, это и сишный заголовок, но он используется в с++-проекте, и принимают его .cpp-файлы, а не .с. так что путаницы не возникает. Если возникает, то можно вместо .h использовать .H, но тогда во имя Луны следует использовать .C вместо .cpp. Хотя, вообще-то и .hpp никто использовать не запрещает, просто он не очень-то и распространён

IceWindDale
()

hpp для меньшей неоднозначности. Так и ассоциировать языки с типами файлов проще.

xaizek ★★★★★
()

*.h.

Сам хедер на случай, если надо его компилировать с сишкой, обернуь в extern «C».

a1batross ★★★★★
()

*.h везде на работе и сам для себя.

Pavval ★★★★★
()

hpp, хотя кое-где и .h, зависит от проекта, IDE и т.д..

peregrine ★★★★★
()

Только .h, только хардкор!

hpp - борланданутый даунизм. Ну как ты это расшифровывать собираешься? Header Plus Plus? Мерзость же.

Да, сразу вспомнился 2004 год, шиндовс и пятый дебилдер...

border-radius
()

hxx и cxx уже был вариант?

anonymous
()

h где описание класса, hpp где еще и реализация.

anonymous
()

еще, кстати h++ есть. Пару раз видел.

anonymous
()

У нас в проекте есть и те и другие. Расширение выбираю исходя из уже существующих файлов в той же папке (кого больше - такое и выбираю)

anonymous
()

.hpp чтобы легко отличать C/C++ заголовки от C++ only заголовков.

anonymous
()

.hpp для C++-only, .h если напиханы экстерны

mersinvald ★★★★★
()
Ответ на: комментарий от next_time

С — подмножество С++

Ну-ну, скомпилируй-ка мне C++-компилятором такой сишный код:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
    size_t s = atoi(argv[1]);
    int arr1[s];
    int* arr2 = malloc(s * sizeof(int));
} 

mersinvald ★★★★★
()
  • h для кода с интерфесами без шаблонов.
  • hpp для кода в котором имеются шаблоны или вся реализация полностью встраиваемая и проведена в хидере
pon4ik ★★★★★
()
Ответ на: комментарий от next_time

Мы говорим о языках вроде, а не расширених компиляторов. По стандарту этот код в C++ невалиден.
Так что и компилируй с -std=c++?? -pedantic

mersinvald ★★★★★
()
Последнее исправление: mersinvald (всего исправлений: 1)

.h каноничнее

.hpp обычно встречается, когда класс вместе с реализацией пихается в заголовочный файл, что на мой взгляд, противоречит хорошим практикам программирования на C++. (Да, я знаю, что у бустеров другое мнение...)

hobbit ★★★★★
()

.h. Различий быть не должно, компиляторы обычно определяют яп по расширению файла с самим кодом, т.е. по {c, cc, cpp}

mashina ★★★★★
()
Ответ на: комментарий от i-rinat

Видел один проект, где прямо в одной директории были .hh, .hpp и .hxx.

Буэ, фу им такими быть :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от mashina

Кстати, вот GCC не распознаёт язык по расширению (т.е. попытка скомпилировать .cpp при помощи gcc, а не g++, обернётся неудачей), зато касательно .h и .hpp всеяден и на подмену одного другим не жалуется.

Hasek ★★
()
Ответ на: комментарий от Hasek

g++
касательно .h и .hpp всеяден и на подмену одного другим не жалуется.

Потому-что препроцессору все-равно что склеивать, хоть код на С. хоть на С++, хоть на Java.

anonymous
()
Ответ на: комментарий от mashina

только что-то не то делает на стадии линковки.

Не добавляет стандартную библиотеку, решается ручными опциями.

anonymous
()

Использую .h

Но Boost например, использует hpp

Uter
()
Ответ на: комментарий от mersinvald

да мог бы просто переменную какую-нибудь плюсишным ключевым словом назвать, например int new = 3; =)

yoghurt ★★★★★
()

Как в гайдлайнах написано так и именую :D

Если нету гайдлайнов, то .h

invy ★★★★★
()
Ответ на: комментарий от mersinvald

Тут вообще UB в понятии C89.

Создавать массив длиной от неконстанты на стеке только в С99 можно.

Но таки да, аргумент в сторону высказывания выше.

a1batross ★★★★★
()

если файлы не содержат cdecl функций, тогда .hpp. все файлы с экспортом для С или других языков - .h

Iron_Bug ★★★★★
()
Последнее исправление: Iron_Bug (всего исправлений: 1)
Ответ на: комментарий от staseg

А у зараженных ООП и паттернизацией головного мозга будут hwcd - header with class declarations, hwacd - header with abstract class declarations и hwid - header with implementation declarations?

border-radius
()
Последнее исправление: border-radius (всего исправлений: 2)
Ответ на: комментарий от border-radius

И ко всем вариантам опционально добавлять nt — ...and templates.

staseg ★★★★★
()
Ответ на: комментарий от a1batross

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

mersinvald ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.