C ++ ekstensi file kode? .cc vs .cpp [ditutup]

599

Saya telah melihat kode C ++ disimpan sebagai keduanya .ccdan .cppfile. Apakah ada perbedaan di antara keduanya?

The panduan gaya Google tampaknya menunjukkan .cc, tapi tidak memberikan penjelasan.

Saya terutama mementingkan program pada sistem Linux.

Jessica
sumber
85
Kesimpulan Tidak masalah. Kemungkinan Asal cc = C dengan kelas, cpp = C plus plus
Lazer
6
Itu penting untuk berdering ++. Ketika Anda memberikan file header C ++ dengan nama yang berakhiran .h, dentang ++ memperingatkan Anda.
allyourcode
4
Alat lain yang sedikit peduli adalah emacs. Dengan konfigurasi .emacs yang bersih, membuka ("menemukan" dalam bahasa emacs) file .h mengaktifkan mode-c, bukan mode c ++ -. Tentu saja, Anda dapat mengkonfigurasi emacs untuk melakukan sesuatu yang lain (seperti halnya semua yang ada di emacs), tetapi poin saya adalah bahwa c-mode adalah default out-of-the-box.
allyourcode
3
lintpeduli, .Cadalah C ++ dan .cC tanpa memahami apa pun dari .ccatau .cpp. Setidaknya pada AIX 6.1.
Jesse Chisholm
5
Menjawab "tidak masalah" tidak terlalu membantu. Pertanyaannya sangat relevan. OP sedang mencari konvensi yang kuat untuk dipatuhi. Jawaban yang lebih baik adalah: "Sayangnya, komunitas C ++ tidak memiliki konvensi yang solid tentang ini". Sedih, kalau dipikir-pikir. Semua bahasa populer lainnya tampaknya memiliki satu ekstensi file unik. Saya akan tetap berpegang pada apa yang digunakan proyek penting, seperti gcc. Mereka menggunakan.cc .
Lucio Paiva

Jawaban:

703

Pada akhirnya, tidak masalah karena kompiler C ++ dapat menangani file dalam format apa pun. Jika ini masalah nyata dalam tim Anda, balikkan koin dan lanjutkan ke pekerjaan yang sebenarnya.

JaredPar
sumber
89
Yah, itu adalah poin yang valid, tetapi tidak menjawab pertanyaan pengguna.
vikrantt
319
cc lebih cepat mengetik
thang
50
Mengapa ini jawaban yang diterima? Seorang programmer yang lebih baru tidak akan tahu bahwa itu tidak masalah dan mereka pantas mendapatkan jawaban langsung.
Robben_Ford_Fan_boy
14
Jawabannya sama sekali tidak cukup untuk seorang programmer yang penasaran dan penuh perhatian. Saya lebih suka jawabannya di halaman ini karena memiliki penjelasan yang lebih rinci.
Novin Shahroudi
2
Ketika seseorang menganggap bahwa kompiler biasanya bukan satu-satunya alat yang terlibat - hampir selalu, ada "make" atau utilitas serupa yang AKAN peduli dengan ekstensi yang Anda gunakan, untuk pencocokan aturan pembangunan - maka jawaban ini benar-benar tidak membahas inti. kekhawatiran pertanyaan. Perhatikan bahwa ada variasi berdasarkan sistem dan oleh toolchain (termasuk favorit Anda membuat aturan dll) yang akan berdampak pada keputusan. Misalnya, sistem multi-target rekursif bawaan yang dibangun beberapa dari seri QNX 6 dari platform pengembangan tidak mengambil file * .cpp sebagai sumber bahasa C ++; ia menginginkan .cc
JoGusto
296

GNU GCC mengakui semua berikut sebagai C ++ file, dan akan menggunakan C ++ kompilasi terlepas dari apakah Anda menjalankan melalui gcc atau g ++: .C, .cc, .cpp, .CPP, .c++, .cp, atau .cxx.

Catatan hal .C- hal dalam GCC, .cadalah file C sedangkan file .CC ++ (jika Anda membiarkan kompiler memutuskan apa yang dikompilasi itu adalah).

GCC juga mendukung sufiks lain untuk menunjukkan penanganan khusus, misalnya .iifile akan dikompilasi sebagai C ++, tetapi tidak diproses sebelumnya (dimaksudkan untuk kode pra-pemrosesan yang terpisah). Semua sufiks yang dikenali dirinci di gcc.gnu.org

Clifford
sumber
5
"kasus penting di GCC" - Bagaimana dengan Windows (karena tidak peka huruf besar-kecil)?
Devesh Khandelwal
17
@ Evesh: Windows juga. Tetapi OS akan mencegah Anda memiliki dua file dalam folder yang hanya dibedakan berdasarkan kasus.
Clifford
23
@DeveshKhandelwal Tapi ini melestarikan kasus
Yatharth Agarwal
229

Saran bagus untuk digunakan untuk makefile dan alat-alat lain, mempertimbangkan alat non-kompiler sambil memutuskan ekstensi mana yang akan digunakan adalah pendekatan yang bagus untuk membantu menemukan jawaban yang cocok untuk Anda.

Saya hanya ingin menambahkan yang berikut untuk membantu dengan beberapa info .ccvs .cppyang saya temukan. Berikut ini adalah ekstensi yang dipecah oleh lingkungan yang berbeda (dari buku "C ++ Primer Plus"):

Unix menggunakan: .C, .cc, .cxx,.c

GNU C ++ menggunakan: .C, .cc, .cxx, .cpp,.c++

Digital Mars penggunaan: .cpp,.cxx

Borland C ++ menggunakan: .cpp

Watcom menggunakan: .cpp

Microsoft Visual C ++ menggunakan: .cpp, .cxx,.cc

Metrowerks CodeWarrior menggunakan: .cpp, .cp, .cc, .cxx,.c++

Lingkungan yang berbeda mendukung ekstensi yang berbeda. Saya juga mencari untuk menjawab pertanyaan ini dan menemukan posting ini. Berdasarkan posting ini saya pikir saya bisa pergi dengan .hppdan .cppuntuk kemudahan cross-platform / cross-tool recognition.

John S.
sumber
5
Jawaban ini paling dekat daripada yang lain dalam benar-benar mencoba untuk mengatasi pertanyaan yang diajukan, yaitu tentang seseorang yang mencari konvensi yang solid untuk dipatuhi. Bahasa lain memiliki itu, tetapi sejauh menyangkut ekstensi file, C ++ tampaknya kurang.
Lucio Paiva
6
Dalam hal apa Unix tidak digunakan .cpp?
Keith Thompson
vc ++ 6.0 tidak mendukung file .cc.
xus
@KeithThompson cehck jawaban pengguna user181548
Spyros Mourelatos
@ SpyrosMourelatos Ya, tetapi masih terjadi bahwa kode C ++ pada sistem mirip Unix sangat umum digunakan .cppuntuk file sumber C ++. (Jawaban yang dikutip mencatat bahwa "cpp" adalah singkatan untuk preprosesor C.)
Keith Thompson
79

.cppadalah ekstensi yang disarankan untuk C ++ sejauh yang saya tahu. Beberapa orang bahkan merekomendasikan penggunaan .hppuntuk header C ++, hanya untuk membedakan dari C.

Meskipun kompiler tidak peduli apa yang Anda lakukan, itu adalah preferensi pribadi.

Ryu
sumber
60
Saya memutuskan untuk beralih dari menggunakan .h ke menggunakan .hpp untuk c ++ header; terutama karena alat lain seperti editor juga perlu tahu - Selain itu ketika menggunakan tajuk yang sudah dikompilasi dengan gcc, standarnya adalah menggunakan C untuk file .h dan C ++ untuk file .hpp kecuali Anda menggunakan opsi '-x c ++ - header' saat mengkompilasi file .h.
jdkoftinoff
5
@ jd. Sepakat. Itu membuat alat otomatis sedikit lebih mudah jika file h / c berubah menjadi file hpp / cpp.
Paul Nathan
4
g ++ tidak mengenali .hpp sebagai header C ++ (untuk prakompilasi header) tetapi .hh melakukannya. Karena ini saya akhirnya menggunakan .cc / .hh lebih .cpp / .hpp karena sebenarnya tidak ada perbedaan nyata.
Tronic
3
@CharlesAddis - Ya, saya harus mengonversi banyak kode yang memiliki "abcd.H" (antarmuka c ++) dan "abcd.h" (antarmuka C) di direktori yang sama dengan "abcd.hpp" dan "abcd.h "karena hanya melakukan" svn co "atau unzip ke kotak Windows atau kotak Mac OS X (dengan sistem file default) akan gagal karena" duplikat nama file "
jdkoftinoff
37

Saya pribadi menggunakan .ccekstensi untuk file implementasi, .hhuntuk header, dan .inluntuk inline / template.

Seperti yang dikatakan sebelumnya, ini terutama masalah selera.

Dari apa yang saya lihat , .cctampaknya lebih " proyek open source berorientasi ", seperti yang disarankan dalam beberapa gaya pengkodean perangkat lunak open source yang hebat, sedangkan. cpptampaknya lebih Windowish.

--- EDIT

Seperti yang disebutkan, ini "dari apa yang saya lihat" , mungkin salah. Hanya saja semua proyek Windows yang pernah saya kerjakan digunakan .cpp, dan banyak proyek open source (yang sebagian besar menggunakan unix-like) .cc.

Contoh gaya pengkodean menggunakan .cc:

Aurélien Vallée
sumber
1
apakah Anda memiliki referensi untuk ini? Saya belum pernah melihat OSS .cc vs Windows .cpp
bobby
6
Visual Studio membuat file .cpp untuk C ++. Saya tidak tahu sejarah di baliknya.
Natan Yellin
7
LLVM Coding Standard tampaknya mengadvokasi untuk .cpp / .h dan menempatkan -*- C++ -*-tag di header llvm.org/docs/CodingStandards.html ; Mozilla Coding Style menyarankan .cpp / .h developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/… ; KDE tampaknya menggunakan .cpp / .h juga quickgit.kde.org
sastanin
19

Ekstensi file lain yang digunakan termasuk .cxxdan .C(huruf besar C). Saya percaya Bjarne Stroustrup digunakan pada .Cawalnya. .cppadalah nama preprocessor C sehingga sangat disayangkan bahwa itu digunakan untuk C ++ juga.

pengguna181548
sumber
13

Pilihan lainnya adalah di .cxxmana xseharusnya menjadi plus diputar 45 °.

Semua Windows, Mac, dan Linux mendukung semuanya, .c++jadi kita harus menggunakannya.

FigBug
sumber
12

Beberapa orang mengatakan .cctidak tahan untuk apa pun? Itu mungkin. C ++ memulai kehidupan sebagai "C dengan Kelas".

Benar itu .ccdan .cppjuga nama perintah pada kebanyakan sistem Unix (c compiler dan c preprocessor masing-masing).

Saya menggunakan .cppsecara eksklusif, tetapi saya mulai pada Windows. .cclebih merupakan konvensi Unix, meskipun saya melihatnya semakin kurang di sana. GNU make memiliki aturan untuk .cppjadi itu mungkin lebih disukai, itu akan berfungsi secara default pada Windows dan yang lainnya. Di sisi lain C ++ modern tidak menggunakan ekstensi sama sekali untuk header, saya benar-benar tidak suka itu. Semua proyek saya digunakan .huntuk file header, dan mereka mendukung C dan C ++ sebanyak mungkin melalui extern "C"dan pengujian __cplusplus.

Ben Voigt
sumber
2
bukankah seharusnya .cwc? :)
Joshua
Sebelum banyak kompiler mendukung ruang nama, mereka juga menggunakan ekstensi .h untuk header standar. Umumnya, kompiler menyediakan versi .h yang sudah usang yang menempatkan perpustakaan ke dalam namespace global. Ini memungkinkan dukungan kode lawas. Saya pernah membaca di suatu tempat bahwa alasan mereka tidak memiliki ekstensi .h adalah bahwa standar memungkinkan mereka bukan file, tetapi pada dasarnya 'built-in'. Namun itu mungkin apokrifa.
Clifford
11

Ikuti saja konvensi yang digunakan oleh proyek / tim.

Ben S
sumber
11

Saya pribadi tidak pernah melihat .ccdalam proyek apa pun yang saya kerjakan, tetapi dalam semua teknis kompiler tidak akan peduli.

Yang akan peduli adalah pengembang yang mengerjakan sumber Anda, jadi aturan praktis saya adalah mengikuti apa yang nyaman dengan tim Anda. Jika "tim" Anda adalah komunitas sumber terbuka, lakukan sesuatu yang sangat umum, yang .cppsepertinya menjadi favorit.

Toji
sumber
Beberapa proyek terkenal seperti github.com/google/googletest digunakan .ccsebagai ekstensi file untuk file implementasi C ++
Vertexwahn
10

Seperti kebanyakan konvensi gaya, hanya ada dua hal yang penting:

  1. Konsisten dengan apa yang Anda gunakan, sedapat mungkin.
  2. Jangan mendesain apa pun yang tergantung pada pilihan tertentu yang digunakan.

Mereka mungkin tampak bertentangan, tetapi mereka masing-masing memiliki nilai karena alasan mereka sendiri.

Alan
sumber
8

.Cdan .cctampaknya menjadi standar untuk (beberapa) program C ++ berorientasi Unix yang pernah saya lihat. Saya selalu menggunakan .cppdiri saya sendiri, karena saya hanya benar-benar bekerja pada Windows dan itu sudah menjadi standar di sana seperti selamanya.

Saya merekomendasikan .cppsecara pribadi, karena ... itu singkatan dari "C Plus Plus". Tentu saja sangat penting bahwa ekstensi file adalah akronim, tetapi jika alasan ini terbukti tidak cukup meyakinkan hal-hal penting lainnya adalah tidak digunakannya tombol shift (yang mengesampingkan .Cdan .c++) dan menghindari metakarakter ekspresi reguler jika memungkinkan (yang mengesampingkan .c++- sayangnya Anda tidak dapat benar-benar menghindari hal itu ..).

Ini tidak mengesampingkan .cc, jadi meskipun tidak benar-benar mendukung apa pun (atau bukan?) Itu mungkin merupakan pilihan yang baik untuk kode yang berorientasi Linux.

tolong hapus saya
sumber
2
Tapi "cpp" juga bisa berarti "C preprocessor". Bahkan, program "cpp" pada sistem Anda kemungkinan besar C preprocessor ...
Jesper
8

Saya telah menggunakan masing-masing .C dan .h untuk source dan header Satu hal yang menyenangkan dengan pilihan itu adalah, pada baris perintah, mudah digunakan *.[Ch]untuk memilih semua file kode. Menggunakan .Cbisa menjadi masalah pada filesystem yang tidak sensitif, tetapi jika Anda memiliki foo.cdan foo.Cdalam direktori yang sama, Anda tetap berhak mendapatkan apa yang Anda dapatkan :)

KeithB
sumber
8

Ekstensi .cc diperlukan untuk menggunakan aturan implisit dalam makefiles. Lihatlah tautan-tautan ini untuk mendapatkan pemahaman yang lebih baik tentang makefile, tetapi lihat terutama yang kedua, karena secara jelas mengatakan kegunaan ekstensi .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

Saya baru tahu ini sekarang.

Kyle
sumber
Sekali lagi mereka hanya .cppfile. Jangan khawatir ! :-)
Tom Taylor
1
Dikatakan "Kami menganjurkan Anda untuk menggunakan akhiran '.cc' untuk file sumber C ++ alih-alih '.C'." Saya menduga itu hanya kata-kata yang buruk. Penggunaan .Cdapat menjadi masalah pada sistem dengan sistem file case-insensitive. Saya tidak berpikir ada keuntungan tertentu, sejauh makemenyangkut, dalam menggunakan .cclebih .cpp, misalnya. Makefiles berfungsi dengan baik .cppuntuk file sumber C ++.
Keith Thompson
7

Tidak masalah ekstensi mana yang Anda gunakan. Pilih yang mana yang Anda suka lebih, konsistenlah dengan penamaan. Satu-satunya pengecualian yang saya ketahui dengan konvensi penamaan ini adalah bahwa saya tidak dapat membuat WinDDK(atau WDKsekarang?) Untuk mengkompilasi .ccfile. Di Linux, itu bukan masalah.

Dmitry
sumber
6

Saya memulai proyek C ++ baru dan mulai mencari yang terbaru dalam gaya C ++. Saya berakhir di sini mengenai penamaan file dan saya pikir saya akan membagikan bagaimana saya menemukan pilihan saya. Ini dia:

Stroustrup melihat ini lebih sebagai pertimbangan bisnis daripada pertimbangan teknis .

Mengikuti sarannya, mari kita periksa apa yang diharapkan oleh alat.

Untuk UNIX / Linux, Anda dapat menafsirkan GNU default berikut membuat aturan sebagai mendukung akhiran nama file .cc, karena aturan .cpp dan .C hanyalah alias:

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

(Catatan: tidak ada alias COMPILE.cxx default)

Jadi jika Anda menargetkan UNIX / Linux, baik .cc dan .cpp adalah opsi yang sangat bagus.

Saat menargetkan Windows, Anda mencari masalah dengan .C, karena sistem file-nya tidak sensitif huruf. Dan mungkin penting bagi Anda untuk mencatat bahwa Visual Studio mendukung sufiks .cpp

Saat menargetkan macOS, perhatikan bahwa Xcode lebih suka .cpp / .hpp (baru diperiksa pada Xcode 10.1). Anda selalu dapat mengubah template header untuk menggunakan .h.

Untuk apa nilainya, Anda juga dapat mendasarkan keputusan Anda pada basis kode yang Anda sukai. Google menggunakan .cc dan LLVM libc ++ menggunakan .cpp, misalnya.

Bagaimana dengan file header? Mereka dikompilasi dalam konteks file C atau C ++, sehingga tidak ada kompiler atau sistem pembangunan perlu membedakan .h dari .hpp. Namun, penyorotan sintaks dan lekukan otomatis oleh editor / IDE Anda dapat menjadi masalah, tetapi hal ini diperbaiki dengan mengaitkan semua file .h ke mode C ++. Sebagai contoh, konfigurasi emacs saya di Linux memuat semua file .h dalam mode C ++ dan mengedit header C dengan baik. Di luar itu, saat mencampurkan C dan C ++, Anda bisa mengikuti saran ini .

Kesimpulan pribadi saya : .cpp / .h adalah jalan dengan resistensi paling rendah.

Armorix
sumber
3

Seperti yang ditulis orang lain sebelum saya, pada akhirnya apa yang digunakan oleh proyek / tim / perusahaan Anda.

Secara pribadi, saya tidak menggunakan ccekstensi, saya mencoba untuk menurunkan jumlah ekstensi dan tidak menambahnya, kecuali ada nilai yang jelas (menurut saya).

Untuk apa nilainya, inilah yang saya gunakan :

c - Hanya kode C murni, tanpa kelas atau struct dengan metode.

cpp - Kode C ++

hpp- Hanya kode tajuk. Implementasi ada di header (seperti kelas templat)

h- File header untuk C / C ++. Saya setuju perbedaan lain dapat dibuat, tetapi ketika saya menulis, saya mencoba untuk menurunkan jumlah ekstensi untuk kesederhanaan. Setidaknya dari proyek C ++ tempat saya bekerja, hfile untuk pure-C lebih jarang, oleh karena itu saya tidak ingin menambahkan ekstensi lain.

TCS
sumber