Розширення файлу коду на C ++? .cc проти .cpp [закрито]


599

Я бачив код C ++, збережений як .ccі .cppфайли. Чи є різниця між ними?

Посібник зі стилів Google, схоже, пропонує .cc, але не дає пояснень.

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


85
Висновок Це не має значення. Можливе походження cc = C з класами, cpp = C плюс плюс
Lazer

6
Це важливо клацнути ++. Коли ви надаєте йому файл заголовка C ++ з іменем, який закінчується .h, clang ++ попереджає вас.
allyourcode

4
Ще один інструмент, який трохи піклується, - це emacs. З чистою конфігурацією .emacs, відкриття ("знаходження" у слові emacs) .h-файл активує c-режим, а не c ++ - режим. Звичайно, ви можете налаштувати emacs, щоб зробити щось інше (як і все, що є в emacs), але моя думка полягає в тому, що c-mode є стандартним за замовчуванням.
allyourcode

3
lintпіклується, .Cце C ++ і .cце C, не розуміючи, що з цього .ccабо .cpp. Принаймні на AIX 6.1.
Jesse Chisholm

5
Відповідь "це не має значення" насправді не допомагає. Питання цілком актуальне. ОП шукала твердої конвенції, якої слід дотримуватися. Кращою відповіддю буде: "На жаль, спільнота C ++ не має твердої конвенції щодо цього". Сумно, якщо подумати. Здається, всі інші популярні мови мають єдине унікальне розширення файлу. Я б дотримувався того, що використовує важливий проект, наприклад, gcc. Вони використовують.cc .
Лусіо Пайва

Відповіді:


703

Зрештою, це не має значення, оскільки компілятори C ++ можуть працювати з файлами в будь-якому форматі. Якщо це справді проблема у вашій команді, переверніть монетку та перейдіть до фактичної роботи.


89
Що ж, це дійсний пункт, але він не відповідає на запитання користувача.
vikrantt

319
кубік швидше набирати
thang

50
Чому це прийнята відповідь? Новий програміст не знатиме, що це не має значення, і вони заслуговують прямої відповіді.
Robben_Ford_Fan_boy

14
Відповіді абсолютно не вистачає для допитливого та розумного програміста. Я хотів би відповіді на цій сторінці більше, оскільки вона має більш детальні пояснення.
Новін Шахроуді

2
Коли ви вважаєте, що компілятор, як правило, не є єдиним залученим інструментом - майже завжди є "make" або подібна утиліта, яка буде Дбати про те, які розширення ви використовуєте, для збірки правил збірки - тоді ця відповідь дійсно не стосується ядра хвилює питання. Зауважте, що існують варіанти системи та ланцюжка інструментів (включаючи ваші улюблені правила створення тощо), які впливатимуть на рішення. Наприклад, рекурсивна система багатоцільової збірки за замовчуванням, деякі з платформ розробників серії QNX 6 не вибирають файли * .cpp як джерела мови C ++; it wantss .cc
JoGusto

296

GNU GCC розпізнає всі наступні як файли C ++, і буде використовувати C ++ компіляція незалежно від того , ви викликаєте його через GCC або G ++: .C, .cc, .cpp, .CPP, .c++, .cp, або .cxx.

Зауважте .C- у GCC справа має значення .c- це файл C, тоді як .Cце файл C ++ (якщо ви дозволите компілятору вирішити, що це компілювати).

GCC також підтримує інші суфікси, щоб вказати на спеціальну обробку, наприклад, .iiфайл буде складено як C ++, але не попередньо оброблений (призначений для окремо попередньо обробленого коду). Усі розпізнані суфікси детально описані на gcc.gnu.org


5
"справи в GCC" - Що з Windows (оскільки це нечутливе до регістру)?
Девеш Хандельваль

17
@Devesh: Windows теж. Але ОС не дозволить вам мати два файли у папці, що відрізняються лише у випадку.
Кліффорд

23
@DeveshKhandelwal Але це зберігає справи
Yatharth Agarwal

229

Прекрасна порада щодо використання для makefile та інших інструментів, враховуючи інструменти, що не використовують компілятор, вирішуючи, яке розширення використовувати, - це чудовий підхід, який допоможе знайти відповідь, який працює для вас.

Я просто хотів додати наступне, щоб допомогти з деякими відомостями .ccпроти, .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для полегшення розпізнавання крос-платформи / перехресних інструментів.


5
Ця відповідь є найбільш близькою, ніж інші, тому що насправді намагаються вирішити представлене питання, яке стосується того, хто шукає твердої конвенції, якої слід дотримуватися. В інших мовах це є, але що стосується розширення файлів, C ++, здається, його не вистачає.
Лусіо Пайва

6
У якому сенсі Unix не використовує .cpp?
Кіт Томпсон

vc ++ 6.0 не підтримує .cc файл.
xus

@KeithThompson cehck відповідь користувача user181548
Spyros Mourelatos

@SpyrosMourelatos Так, але все-таки справа в тому, що код C ++ в системах, схожих на Unix, дуже часто використовується .cppдля вихідних файлів C ++. (У цитованій відповіді зазначається, що "cpp" - це абревіатура для препроцесора C.)
Кіт Томпсон,

79

.cppнаскільки я знаю, є рекомендованим розширенням для C ++. Деякі люди навіть рекомендують використовувати .hppдля заголовків C ++, просто щоб відрізнити їх від C.

Хоча компілятору все одно, що ви робите, це особисті переваги.


60
Я вирішив перейти з використання .h на використання .hpp для заголовків c ++; насамперед тому, що також потрібно знати інші інструменти, такі як редактори. Крім того, коли ви використовуєте попередньо складені заголовки з gcc, він за замовчуванням використовує C для файлів .h та C ++ для .hpp-файлів, якщо ви не використовуєте параметр '-x c ++ - header' при попередньому компілюванні. .h файл.
jdkoftinoff

5
@jd. Домовились. Це робить автоматизовані інструменти трохи полегшеними, якщо h / c файли перетворюються на hpp / cpp-файли.
Пол Натан

4
g ++ не розпізнає .hpp як заголовок C ++ (для попередньої компіляції заголовка), але .hh це робить. Через це я застосував .cc / .hh через .cpp / .hpp, оскільки насправді різниці немає.
Tronic

12
@Tronic: оскільки 4,3 gcc розпізнає .hpp, порівняйте gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Overall-Options.html з gcc.gnu.org/onlinedocs/gcc-4.3.6/gcc/Overall -Options.html
CesarB

3
@CharlesAddis - Так, мені довелося конвертувати багато коду, який мав "abcd.H" (інтерфейс c ++) і "abcd.h" (інтерфейс C) в одному каталозі в "abcd.hpp" і "abcd.h "тому що просто" svn co "або розпаковувати його на вікно Windows або Mac OS X box (з файловою системою за замовчуванням) не вдалося б через" копіювати імена файлів "
jdkoftinoff

37

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

Як говорилося раніше, це в основному питання смаку.

З того, що я бачив , .ccздається, більше " орієнтовані на проекти з відкритим кодом ", як це рекомендується в деяких великих стилях кодування програмного забезпечення з відкритим кодом, тоді як. cppздається, більш віконним.

--- РЕДАКТУВАТИ

Як уже згадувалося, це "з того, що я бачив" , можливо, це неправильно. Просто всі проекти Windows, над якими я працював, використовуються .cppі багато проектів з відкритим кодом (які в основному стосуються unix-лайків) .cc.

Приклади стилів кодування за допомогою .cc:


1
у вас є посилання на це? Я ніколи не бачив OSS .cc проти Windows .cpp
боббі

6
Visual Studio створює .cpp файли для C ++. Я не знаю історії за нею.
Натан Єллін

7
Здається, що стандарт кодування LLVM виступає за .cpp / .h та розміщення -*- C++ -*-тегів у заголовках llvm.org/docs/CodingStandards.html ; Стиль кодування Mozilla пропонує .cpp / .h developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/… ; Здається, KDE використовує .cpp / .h too quickgit.kde.org
зустріч

19

Інші використовувані розширення файлів включають .cxxі .C(з великої літери C). Я вважаю, що Bjarne Stroustrup використовувався .Cспочатку. .cpp- це ім'я препроцесора C, тому його прикро, що він використовувався і для C ++.


13

Інший варіант - .cxxде xпередбачається плюс на 45 °.

Windows, Mac і Linux всі підтримують, .c++тому ми повинні просто використовувати це.


12

Кілька людей говорять, що .ccнічого не означає? Це могло б. C ++ розпочав життя як "C з класами".

Правда , що .ccі .cppтакож імена команд на більшості систем Unix (з компілятором і з препроцесором відповідно).

Я використовую .cppексклюзивно, але я почав у Windows. .ccце більше конвенція Unix, хоча я все менше і менше бачу там. GNU make має правила, .cppтому це, мабуть, бажано, воно буде працювати за замовчуванням як для Windows, так і для всього іншого. З іншого боку, сучасний C ++ взагалі не використовує розширення для заголовків, мені це дуже не подобається. Усі мої проекти використовуються .hдля файлів заголовків, і вони максимально підтримують і C, і C ++ за допомогою extern "C"тестування __cplusplus.


2
чи не повинен це бути .cwc? :)
Джошуа

Перед тим, як багато компіляторів підтримували простори імен, вони також використовували розширення .h для стандартних заголовків. Зазвичай компілятори надають застарілі версії .h, які розміщують бібліотеку у глобальному просторі імен. Це дозволяє підтримувати застарілий код. Десь я десь прочитав, що причина у них немає .h-розширень полягає в тому, що стандарт дозволяє їм бути не файлами, а по суті "вбудованими". Однак це може бути апокрифним.
Кліффорд

11

Просто дотримуйтесь конвенції, якою користуються проект / команда.


11

Я особисто ніколи не бачив .ccжодного проекту, над яким працював, але з усієї технічності компілятор не піклується.

Кому буде байдуже, це розробники, які працюють над вашим джерелом, тому моє правило полягає в тому, щоб працювати з тим, що вашій команді комфортно. Якщо ваша "команда" - це спільнота з відкритим кодом, поговоріть із чимось дуже поширеним, серед яких, .cppздається, улюбленим.


Кілька відомих проектів, таких як github.com/google/googletest використовують .ccяк розширення файлів для файлів реалізації C ++
Vertexwahn

10

Як і у більшості стильових конвенцій, важливі лише дві речі:

  1. Будьте послідовні у використанні, де це можливо.
  2. Не розробляйте нічого, що залежить від конкретного вибору, який ви використовуєте.

Вони можуть здатися суперечливими, але кожен має значення з власних причин.


8

.Cі, .ccздається, є стандартним для (декількох) програм, орієнтованих на Unix, C ++, які я бачив. Я завжди використовував .cppсебе, оскільки я справді працюю тільки в Windows, і це був стандарт, як завжди.

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

Це не виключає .cc, тому, хоча він насправді нічого не стоїть (чи це робить?), Це, мабуть, хороший вибір для орієнтованого на Linux коду.


2
Але "cpp" також може означати "C препроцесор". Насправді програма "cpp" у вашій системі, швидше за все, є препроцесором C ...
Jesper

8

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


8

Розширення .cc необхідне для використання неявних правил у makefiles. Перегляньте ці посилання, щоб краще зрозуміти файли, але перегляньте переважно друге, оскільки це чітко говорить про корисність розширення .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

Я щойно дізнався про це зараз.


Знову це просто .cppфайли. Не хвилюйтесь! :-)
Том Тейлор

1
У ньому написано "Ми рекомендуємо вам використовувати суфікс" .cc "для вихідних файлів C ++ замість" .C "." Я підозрюю, що це лише погана формулювання. Використання .Cможе бути проблематичним у системах з файловими системами, нечутливими до регістру. Я не думаю , що є якийсь - або конкретна перевага, наскільки makeце стосується, при використанні .ccбільш ніж .cpp, наприклад. Makefiles добре працює з .cppвихідними файлами C ++.
Кіт Томпсон

7

Не має значення, яке з цих розширень ви б використовували. Вибирайте те, що вам більше подобається, просто дотримуйтесь назв. Єдиний виняток, про який я знаю з цієї угоди про іменування - це те, що я не зміг WinDDK(або це WDKзараз?) Компілювати .ccфайли. У Linux, хоча це навряд чи проблема.


6

Я починаю новий проект C ++ і почав шукати найновіші у стилі C ++. Я закінчився тут щодо іменування файлів і думав, що поділюсь тим, як придумав свій вибір. Ось:

Stroustrup сприймає це скоріше як діловий розгляд, ніж технічний .

Дотримуючись його порад, давайте перевіримо, що очікує ланцюжок інструментів.

Для UNIX / Linux ви можете інтерпретувати такі правила GNU за замовчуванням як перевагу суфіксу назви файлу .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 libc ++ .cpp.

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

Мій особистий висновок : .cpp / .h - шлях найменшого опору.


3

Як інші писали перед мною, врешті-решт, чим користується ваш проект / команда / компанія.

Особисто я не використовую ccрозширення, я намагаюся зменшити кількість розширень і не збільшувати їх, якщо немає чіткого значення (на мою думку).

Для чого це варто, це те, що я використовую :

c - тільки чистий код C, без класів і не працює з методами.

cpp - код C ++

hpp- Код лише заголовків. Впровадження в заголовках (наприклад, шаблонні класи)

h- файли заголовків для обох C / C ++. Я згоден, можна зробити ще одне розрізнення, але, як я писав, я намагаюся зменшити кількість розширень для простоти. Принаймні з проектів C ++, над якими я працював, hфайли для pure-C є більш рідкісними, тому я не хотів додавати інше розширення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.