.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.