В чем разница между заголовочными файлами C (.h) и заголовочными файлами C++ (.hpp)?

Я заметил, что библиотека boost использует заголовочные файлы (.hpp).
Мне любопытно, так как большинство исходных файлов, которые я вижу, используют обычные заголовочные файлы .h.
Могут ли быть какие-то особые случаи, которые оправдывают использование .hpp вместо .h?

Спасибо

Ответ 1

Просто конвенция, ничего особенного. Фактически вы можете использовать любое расширение для включенных файлов.

Ответ 2

.hpp,.H и т.д. является свободным соглашением для файлов заголовков С++,.tcc является свободным соглашением для реализации шаблона С++,.h - довольно сильное соглашение для c файлов.

Boost использует расширение hpp, QT использует расширение .h, STL не имеет расширения. Я уверен, что есть библиотеки, которые используют .H, но не видели.

Ответ 3

Действительно, Отавио прав.

Я использую hpp/h для разграничения между двумя языками при создании продуктов на смешанном языке. Например, определение класса может идти в .hpp(реализация в .cpp), тогда как файл .h будет определять только функции, поддерживаемые C. Для этого разделения важно знать разницу между языками - с этой целью Я передаю *.c через gcc и *.cpp через g++.

Ответ 4

Цель директивы #include "filename" препроцессора заключается в замене строки #include на содержимое filename.
 Настолько infact любое имя для файла делало бы, но по мере того как оно случается быть соглашением включенные файлы ".h" или ".hpp", одно преимущество быть выделение синтаксиса в редакторе на вашем выборе (vim в моем случае).

Ответ 5

Я слышал, что некоторые программисты UNIX и Linux также часто используют .hh и .cc в отличие от .cpp и .h. Лично мне нравится называть мои файлы заголовков .hh, потому что это помогает emacs различать подсветку синтаксиса C и С++. Я также использую расширение .cc, потому что оно хорошо выглядит вместе с .hh, и оно короче, чем .cpp. И я обычно делаю свое кодирование в средах Linux и для них.

Ответ 6

вы просто сообщаете компилятору включить данный файл в свой код во время компиляции. поэтому не имеет значения, какое расширение имеет файл. Но предпочтительно это должен быть текстовый файл.