2011-03-02 5 views
163

Возможные Дубликаты:
*.h or *.hpp for your class definitions
Correct C++ code file extension? .cc vs .cpp.c против .cc против .cpp против .hpp против .h против .cxx

Я привык думать, что он используется для что:

  • .h файлы являются заголовочными файлами для C и C++ и обычно содержат только декларацию ЦИИ.
  • .c Файлы являются исходными кодами C.
  • .cpp файлы являются исходными кодами C++ (которые также могут быть исходным кодом C).

затем файлы, такие как .hpp, .cc и .cxx пришел вместе, и я совершенно запутался ... какая разница (s) между теми? Когда вы используете «новые»?

+0

Я предпочитаю '.cxx' над' .cpp' для согласованности с соглашениями makefile (см. Http://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html) – Christoph

ответ

227

Исторически первые расширения, используемые для C++ были .c и .h, так же, как для C. Это вызвало практические проблемы, особенно .c, которые не позволяют системы сборки легко дифференцировать C++ и файлы C.

Unix, на котором был разработан C++, имеет файловые системы, чувствительные к регистру. Поэтому некоторые использовали .C для файлов C++. Прочее оборудование .c++, .cc и .cxx. .C и .c++ есть проблема, что они недоступны в других файловых системах, и их использование быстро снизилось. Компиляторы DOS и Windows C++ обычно используют .cpp, а некоторые из них делают выбор сложным, если не невозможным, для настройки. Рассмотрение переносимости сделало этот выбор наиболее распространенным, даже вне MS-Windows.

Заголовки использовали соответствующие .H, .h++, .hh, .hxx и .hpp. Но в отличие от основных файлов, .h по-прежнему остается популярным выбором для C++, даже с тем недостатком, что он не позволяет узнать, может ли заголовок быть включен в контекст C или нет. Стандартные заголовки теперь не имеют расширения.

Кроме того, некоторые используют .ii, .ixx, .ipp, .inl для заголовков, обеспечивающих встроенные определения и .txx, .tpp и .tpl для определения шаблона. Они включаются в заголовки, предоставляющие определение, или вручную в тех контекстах, где они необходимы.

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

2017 Редактирование: экспериментальная поддержка модуля Visual Studio признать .ixx как расширение по умолчанию для интерфейсов модулей, лязг ++ признает .c++m, .cppm и .cxxm для той же цели.

20

Это действительно не имеет значения.
Если вы подаете .c в компилятор C++, он будет компилироваться как cpp, .cc/.cxx - это просто альтернатива .cpp, используемая некоторыми компиляторами.

.hpp - это попытка различить файлы заголовков, где есть значительные отличия c и C++. Общее использование - для .hpp, чтобы иметь необходимые обертки cpp или пространство имен, а затем включить .h, чтобы выставить библиотеку c на c и C++.

+0

Я также хотел бы отметить что .cc является более распространенным (но не «стандартным» каким-либо образом) в UNIX-подобных системах, где .cpp чаще встречается в системах Windows. По крайней мере, в моих наблюдениях. –

+0

Я думал, что компилятор Sun C++ используется .cc, но я не смог найти ссылку. –

14

Я использую «.hpp» для заголовков C++ и «.h» для заголовков языка C. «.hpp» напоминает мне, что файл содержит инструкции для языка C++, которые недопустимы для языка C, такие как как объявления класса.

39

Эти расширения на самом деле не новые, они старые. :-)

Когда C++ был новым, некоторые люди хотели иметь расширение .C++ для исходных файлов, но это не работало в большинстве файловых систем. Поэтому они попробовали что-то близкое к этому, например .cxx или .cpp.

Другие думали об имени языка и «увеличивая» .c, чтобы получить .cc или даже .C в некоторых случаях. На это не так много ловля.

Некоторые полагали, что если источник является .cpp, заголовки должны быть .hpp для соответствия. Умеренно успешный.

4

Как правило, файлы .c и .h предназначены для C или C-совместимого кода, все остальное - C++.

Многие предпочитают использовать согласованное сопряжение для файлов C++: .cpp с .hpp, .cxx с .hxx, .cc с .hh и т. Д. Мои личные предпочтения относятся к .cpp и .hpp.

5

Говоря о расширении .hpp, я считаю полезным, когда люди должны знать, что этот файл заголовок содержит C++ не C, как с помощью пространств имен или шаблонов и т.д., на данный момент они видят файлы, так они не будут пытаться подавать его на компилятор C! И еще мне нравится называть файлы заголовков, которые содержат не только декларации, но и реализации, как .hpp-файлы.как заголовочные файлы, включая классы шаблонов. Хотя это только мое мнение, и, конечно, это не должно быть правильно! :)

Смежные вопросы