Исторически первые расширения, используемые для 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
для той же цели.
Я предпочитаю '.cxx' над' .cpp' для согласованности с соглашениями makefile (см. Http://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html) – Christoph