.с vs.cc и.cpp против hpp против h против cxx [дубликат]

Возможные Дубликаты:
*.h или *.hpp для ваших определений классов
правильное расширение файла кода C++? .чч против .cpp

раньше я думал, что это было так:

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

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

6 ответов


исторически первыми расширениями, используемыми для 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 edit: поддержка экспериментального модуля Visual Studio recognize .ixx в качестве расширения по умолчанию для интерфейсов модулей clang++ распознает .c++m, .cppm и .cxxm С той же целью.


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

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

другие думали о названии языка, а "приращение" .c, чтобы получить .cc или даже .С в некоторых случаях. Не так уж много я понял.

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


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

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


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


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

многие люди предпочитают использовать согласованное сопряжение для файлов c++:.с СРР .ТЭЦ. ,с схх .hxx,.cc С.ДХ и т. д. Мое личное предпочтение-за .cpp и .ТЭЦ.


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