.c vs .cc против .cpp vs .hpp vs .h vs .cxx

Возможные дубликаты:
*. h или *.hpp для определения вашего класса
Исправить расширение файла кода на С++?.cc vs .cpp

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

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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