Расширение файла кода C ++? .cc против .cpp

496

Я видел код С++, сохраненный как файлы .cc, так и .cpp. Есть ли разница между двумя?

Руководство по стилю Google, кажется, предлагает .cc, но не дает никаких объяснений.

В основном я занимаюсь программами в Linux-системах.

  • 65
    Заключение Это не имеет значения. Возможное происхождение cc = C с классами, cpp = C плюс плюс
  • 5
    Это важно, чтобы лязгать ++. Когда вы даете ему заголовочный файл C ++ с именем, оканчивающимся на .h, clang ++ предупреждает вас.
Показать ещё 9 комментариев
Теги:
filenames

17 ответов

564
Лучший ответ

В конце дня это не имеет значения, поскольку компиляторы С++ могут обрабатывать файлы в любом формате. Если это реальная проблема в вашей команде, переверните монету и перейдите к фактической работе.

  • 57
    Ну, это верный момент, но он не отвечает на вопрос пользователя.
  • 228
    cc быстрее печатать
Показать ещё 4 комментария
223

GNU GCC распознает все следующие файлы С++ и будет использовать компиляцию С++ независимо от того, вы используете ее через gcc или g++: .C, .cc, .cpp, .cpp, .c++, .cp или .cxx.

Обратите внимание на .C - дело имеет значение в GCC, .C является файлом C, тогда как .C является С++ файлом (если вы разрешите компилятору решить, что он компилирует).

GCC также поддерживает другие суффиксы для указания специальной обработки, например, файл .ii будет скомпилирован как С++, но не предварительно обработан (предназначен для отдельного предварительно обработанного кода). Все признанные суффиксы подробно описаны в gcc.gnu.org

  • 2
    «регистр имеет значение в GCC» - как насчет Windows (поскольку он не учитывает регистр)?
  • 5
    @Devesh: Windows тоже. Но ОС не позволит вам иметь два файла в папке, которые различаются только регистром.
Показать ещё 1 комментарий
152

Отличный совет, который следует использовать для make файла и других инструментов, учитывая, что некомпиляторские инструменты при принятии решения о том, какое расширение использовать, является отличным подходом, помогающим найти ответ, который работает для вас.

Я просто хотел добавить следующее, чтобы помочь с некоторыми .cc vs .cpp информацией, которую я нашел. Ниже приведены расширения, разбитые по разным средам (из книги "C++ Primer Plus"):

Unix использует: .C, .cc, .cxx, .c

GNU C++ использует: .C, .cc, .cxx, .cpp .C++

Digital Mars использует: .cpp, .cxx

Borland C++ использует: .cpp

Watcom использует: .cpp

Microsoft Visual C++ использует: .cpp, .cxx, .cc

Metrowerks CodeWarrior использует: .cpp, .cp, .cc, .cxx .C++

Разные среды поддерживают разные расширения. Я тоже искал, чтобы ответить на этот вопрос и нашел этот пост. Основываясь на этом посте, я думаю, что я мог бы пойти с .hpp и .cpp для простоты кросс-платформенного/кросс-инструментального распознавания.

  • 3
    «На основе этой статьи»: На какой статье?
  • 23
    @phresnel this-> статья
Показать ещё 5 комментариев
68

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

Хотя компилятору все равно, что вы делаете, это личные предпочтения.

  • 51
    Я решил переключиться с использования .h на использование .hpp для заголовков c ++; в первую очередь потому, что другие инструменты, такие как редакторы, должны знать об этом. Кроме того, при использовании скомпилированных заголовков с gcc по умолчанию используется C для файлов .h и C ++ для файлов .hpp, если вы не используете опцию '-x c ++ - header' при предварительной компиляции .h файл.
  • 4
    @jd. Согласовано. Это упрощает автоматизированные инструменты, если h / c-файлы превращаются в hpp / cpp-файлы.
Показать ещё 6 комментариев
27

Я лично использую расширение .cc для файлов реализации, .hh для заголовков и .inl для встроенных/шаблонов.

Как говорилось ранее, это в основном вопрос вкуса.

Из того, что я видел, .cc, похоже, больше ориентирован на проекты с открытым исходным кодом, поскольку он рекомендуется в некоторых великолепных стилях кодирования программного обеспечения с открытым исходным кодом, тогда как. cpp кажется более Windowish.

--- EDIT

Как уже упоминалось, это "из того, что я видел", это может быть неправильно. Это просто, что все проекты Windows, над которыми я работал, использовали .cpp, а много проектов с открытым исходным кодом (которые в основном относятся к unix-like) используют .cc.

Примеры стилей кодирования с использованием .cc:

  • 1
    у вас есть ссылки на это? Я никогда не видел OSS .cc против Windows .cpp
  • 5
    Visual Studio создает файлы .cpp для C ++. Я не знаю историю этого.
Показать ещё 1 комментарий
16

Другие используемые расширения файлов включают .cxx и .C (капитал C). Я считаю, что Бьярне Страуступ первоначально использовал .C. .cpp - это имя препроцессора C, поэтому ему не повезло, что он также использовался для С++.

11

Просто следуйте за соглашением, используемым проектом/командой.

11

Другим вариантом является .cxx, где предполагается, что x является плюсом, повернутым на 45 °.

Windows, Mac и Linux поддерживают .c++, поэтому мы должны просто использовать это.

9

Несколько человек, говорящих .cc, ничего не стоят? Возможно. С++ начал жизнь как "C с классами".

Верно, что .cc и .cpp также являются именами команд в большинстве систем Unix (c компилятор и c препроцессор соответственно).

Я использую .cpp исключительно, но я начал работать в Windows. .cc - скорее соглашение Unix, хотя я вижу его все меньше и меньше. У GNU make есть правила для .cpp, поэтому, вероятно, предпочтительнее, он будет работать по умолчанию как в Windows, так и во всем остальном. С другой стороны, современный С++ не использует никакого расширения для заголовков, мне это действительно не нравится. Все мои проекты используют .h для файлов заголовков, и они максимально поддерживают как C, так и С++ с помощью extern "C" и тестирования __cplusplus.

  • 1
    не должно ли это быть .cwc тогда? :)
  • 0
    До того, как многие компиляторы поддерживали пространства имен, они также использовали расширение .h для стандартных заголовков. Обычно компиляторы предоставляют устаревшие версии .h, которые помещают библиотеку в глобальное пространство имен. Это позволяет поддерживать устаревший код. Однажды я где-то читал, что причина, по которой у них нет расширений .h, заключается в том, что стандарт позволяет им быть не файлами, а по сути «встроенными». Однако это может быть апокрифическим.
9

Я никогда не видел .cc в любом проекте, над которым я работал, но по всем техническим требованиям компилятору все равно.

Кто будет заботиться о том, чтобы разработчики работали над вашим источником, поэтому мое эмпирическое правило - это то, что вам нравится в вашей команде. Если ваша "команда" - сообщество с открытым исходным кодом, переходите к чему-то очень распространенному, из которых .cpp кажется фаворитом.

8

Не важно, какое из этих расширений вы будете использовать. Выберите то, что вам больше нравится, просто согласитесь с именованием. Единственное исключение, о котором я знаю в этом соглашении об именах, заключается в том, что я не мог сделать WinDDK (или это WDK сейчас?) Для компиляции файлов .cc. На Linux это вряд ли проблема.

7

Я использую .C и .h для источника и заголовка, соответственно. Одна хорошая вещь с этим выбором заключается в том, что в командной строке его легко использовать *.[Ch] для выбора всех файлов кода. Использование .C может быть проблемой для нечувствительных к регистру файловых систем, но если у вас есть foo.c и foo.c в том же каталоге, вы все равно заслуживаете того, что получите:)

7

Как и в большинстве конвенций стиля, есть только две вещи:

  • Будьте в курсе того, что вы используете, где это возможно.
  • Не создавайте ничего, что зависит от конкретного выбора.

Возможно, это противоречит, но каждый из них имеет ценность по своим причинам.

7

.C и .cc кажутся стандартными для (нескольких) Unix-ориентированных программ на С++, которые я видел. Я всегда использовал .cpp сам, поскольку я действительно работаю только на Windows, и это был стандарт там, так как навсегда.

Я рекомендую .cpp лично, потому что... это означает "C Plus Plus". Разумеется, жизненно важно, чтобы расширения файлов были аббревиатурами, но если это обоснование окажется недостаточно убедительным, другие важные вещи - это не использование ключа сдвига (который исключает .C и .c++) и избегает метасимволов регулярного выражения, где это возможно (что исключает .c++ - к сожалению, вы действительно не можете избежать ., конечно.).

Это не исключает .cc, поэтому, хотя это действительно не означает ничего (или делает это?), это, вероятно, хороший выбор для Linux-ориентированного кода.

  • 2
    Но «cpp» может также означать «препроцессор C». Фактически, программа "cpp" в вашей системе, скорее всего, является препроцессором C ...
  • 8
    Может быть, .cc расшифровывается как "видите? Видите? Это сработало!"
Показать ещё 1 комментарий
6

Расширение .cc необходимо для использования неявных правил в make файлах. Просмотрите эти ссылки, чтобы лучше понять make файлы, но посмотрите в основном второй, так как он ясно говорит о полезности расширения .cc:

ftp://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_2.html

https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html

Я только что узнал об этом сейчас.

  • 0
    Опять они просто .cpp файлы. Не волнуйтесь ! :-)
  • 0
    В нем говорится: «Мы рекомендуем вам использовать суффикс« .cc »для исходных файлов C ++ вместо« .C »». Я подозреваю, что это просто плохая формулировка. Использование .C может быть проблематичным в системах с файловой системой без учета регистра. Я не думаю, что есть какое-то конкретное преимущество в том, что касается make , например, при использовании .cc над .cpp . Makefile прекрасно работает с .cpp для исходных файлов C ++.
6

cpp = c plus plus, и поэтому я предпочитаю, что означает cc или cxx?

  • 59
    cxx - это c ++ после того, как плюсовые символы упали Вы знаете, они нестабильны, стоя на одном месте, как это. С более стабильный. Это также, как Apple II, как Apple //.
  • 4
    @ Дэвид - Может быть, я просто очень стар, но я помню Apple II как «Apple] [».
Показать ещё 3 комментария
0

Я начинаю новый проект C++ и начинаю искать последние в стиле C++. Я попал сюда по поводу именования файлов и подумал, что поделюсь своим мнением. Вот оно:

Страуструп рассматривает это скорее как деловое соображение, чем как техническое.

Следуя его совету, давайте проверим, чего ожидают цепочки инструментов.

Для UNIX/Linux вы можете интерпретировать следующие стандартные правила GNU make как предпочтение суффиксу имени файла .cc, так как правила .cpp и .C являются просто псевдонимами:

$ make -p | egrep COMPILE[^=]+=
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
COMPILE.cpp = $(COMPILE.cc)
COMPILE.C = $(COMPILE.cc)

(Примечание: псевдоним COMPILE.cxx по умолчанию отсутствует)

Так что, если вы нацелены на UNIX/Linux, и .cc, и .cpp - очень хорошие варианты.

Ориентируясь на Windows, вы ищете проблемы с .C, так как ее файловая система не учитывает регистр. И вам может быть важно отметить, что Visual Studio предпочитает суффикс .cpp

При нацеливании на macOS обратите внимание, что Xcode предпочитает .cpp/.hpp (только что проверено на Xcode 10.1). Вы всегда можете изменить шаблон заголовка, чтобы использовать .h.

Для чего бы это ни стоило, вы также можете основывать свое решение на кодовых базах, которые вам нравятся. Google использует .cc, а LLVM lib C++ использует, например,.cpp.

Как насчет заголовочных файлов? Они скомпилированы в контексте файла C или C++, поэтому компилятору или системе сборки не нужно отличать .h от .hpp. Однако может возникнуть проблема с подсветкой синтаксиса и автоматическим отступом вашего редактора /IDE, но это можно исправить, связав все файлы .h с режимом C++. Например, моя конфигурация emacs в Linux загружает все файлы .h в режиме C++ и прекрасно редактирует заголовки C. Кроме того, при смешивании C и C++ вы можете следовать этому совету.

Мой личный вывод: .cpp/.h - путь наименьшего сопротивления.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню