C ++ kod dosya uzantısı? .cc vs .cpp [kapalı]


599

Her iki olarak kaydedilen C ++ kod gördük .ccve .cppdosyaları. İkisi arasında bir fark var mı?

Google stil kılavuzu önermek gibi görünüyor .cc, ancak herhangi bir açıklama sağlar.

Esas olarak Linux sistemlerindeki programlarla ilgileniyorum.


85
Sonuç Önemli değil. Olası Köken cc = C, sınıflarla birlikte, cpp = C artı artı
Lazer

6
Clang ++ için önemlidir. .H ile biten bir ada sahip bir C ++ başlık dosyası verdiğinizde, clang ++ sizi uyarır.
allyourcode

4
Biraz önemseyen başka bir araç emacs. Temiz bir .emacs yapılandırmasıyla, (emacs parlance'de "bulma") bir .h dosyasının açılması, c ++ modunu değil c modunu etkinleştirir. Tabii ki, emac'leri başka bir şey yapacak şekilde yapılandırabilirsiniz (emacs'taki her şeyde olduğu gibi), ama benim açımdan c-modunun kutudan çıktığı varsayılan varsayılan olmasıdır.
allyourcode

3
lintumurunda, .CC ++ ve .chiçbir anlama sahip C .ccveya .cpp. En azından AIX 6.1'de.
Jesse Chisholm

5
"Önemli değil" cevabı gerçekten yardımcı olmuyor. Soru tamamen alakalı. OP sağlam bir kongre arıyordu. Daha iyi bir cevap şöyle olacaktır: "Ne yazık ki, C ++ topluluğunun bu konuda sağlam bir sözleşmesi yoktur". Düşünürseniz üzücü. Diğer tüm popüler diller tek, benzersiz bir dosya uzantısına sahip gibi görünüyor. Gcc gibi önemli bir projenin ne kullandığına bağlı kalırım. Kullanıyorlar.cc .
Lucio Paiva

Yanıtlar:


703

Günün sonunda önemli değil, çünkü C ++ derleyicileri her iki formatta da dosyaları ele alabilir. Ekibinizdeki gerçek bir sorunsa, bozuk para çevirin ve asıl işe geçin.


89
Bu geçerli bir nokta, ancak kullanıcının sorusuna cevap vermiyor.
vikrantt

319
cc yazın hızlıdır
numaranı

50
Bu neden kabul edilen cevap? Daha yeni bir programcı bunun önemsiz olduğunu bilmeyecek ve basit bir cevabı hak edecektir.
Robben_Ford_Fan_boy

14
Cevap, meraklı ve dikkatli bir programcı için kesinlikle yeterli değildir. Daha ayrıntılı açıklamaları olduğu için bu sayfadaki cevabı daha çok istiyorum .
Novin Shahroudi

2
Derleyici genellikle ilgili tek araç olmadığını düşünürse - neredeyse her zaman, hangi kuralların eşleşmesi için kullandığınız uzantıları önemseyecek "make" veya benzer bir yardımcı program vardır - o zaman bu cevap gerçekten çekirdeği ele almaz sorunun endişeleri. Karar üzerinde etkisi olacak sistem ve araç zincirine (favori marka yapma kurallarınız dahil) göre farklılıklar olduğunu unutmayın. Örneğin, QNX 6 serisinin bazı geliştirme platformlarındaki varsayılan özyinelemeli çok hedefli derleme sistemi, C ++ dil kaynakları olarak * .cpp dosyalarını almaz; .cc istiyor
JoGusto

296

GNU GCC C ++ dosyaları olarak aşağıdakilerden hepsi tanır ve gcc ile bunun çağırmak C ++ derleme bakılmaksızın seni kullanacak veya g ++: .C, .cc, .cpp, .CPP, .c++, .cp, veya .cxx.

Not .C- GCC'de önemli olan .cbir C dosyası iken .CC ++ dosyasıdır (derleyicinin ne derlediğine karar vermesine izin verirseniz).

GCC ayrıca özel işlemeyi belirtmek için diğer sonekleri de destekler, örneğin bir .iidosya C ++ olarak derlenecek, ancak önceden işlenmeyecektir (ayrı olarak önceden işlenmiş kod için tasarlanmıştır). Tanınan tüm son ekler gcc.gnu.org adresinde detaylandırılmıştır.


5
"GCC'de vaka önemlidir" - Peki ya Windows (büyük / küçük harfe duyarlı olmadığı için)?
Devesh Khandelwal

17
@Devesh: Windows da. Ancak işletim sistemi, bir klasörde yalnızca dosyaya göre ayırt edilen iki dosyaya sahip olmanızı engelleyecektir.
Clifford

23
@DeveshKhandelwal Ama bu durum koruyucudur
Yatharth Agarwal

229

Hangi uzantıyı kullanacağınıza karar verirken derleyici olmayan araçları göz önünde bulundurarak, makefile ve diğer araçlar için hangi öğelerin kullanılacağına dair harika tavsiyeler, sizin için çalışan bir cevap bulmanıza yardımcı olacak harika bir yaklaşımdır.

Ben sadece bulduğum bazı bilgi .ccvs yardımcı olmak için aşağıdakileri eklemek istedim .cpp. Aşağıdakiler farklı ortamlara göre ayrılmış uzantılardır ("C ++ Primer Plus" kitabından):

Unix kullanımları: .C, .cc, .cxx,.c

GNU C ++ kullanımları: .C, .cc, .cxx, .cpp,.c++

Dijital Mars kullanımları: .cpp,.cxx

Borland C ++ şunları kullanır: .cpp

Watcom şunları kullanır: .cpp

Microsoft Visual C ++ kullanımları: .cpp, .cxx,.cc

Metrowerks CodeWarrior kullanımları: .cpp, .cp, .cc, .cxx,.c++

Farklı ortamlar farklı uzantıları destekler. Ben de bu soruyu cevaplamak istiyordum ve bu yazıyı buldum. Bu yazıyı temel alarak platformlar arası / araçlar arası tanıma kolaylığı .hppve .cppkolaylığı için gidebileceğimi düşünüyorum .


5
Bu soru, sunulan soruyu gerçekten çözmeye çalışırken diğerlerinden daha yakındır, bu da sadık bir kongre arayan biri hakkındadır. Diğer diller var, ancak dosya uzantısı söz konusu olduğunda, C ++ eksik görünüyor.
Lucio Paiva

6
Unix hangi anlamda kullanılmıyor .cpp?
Keith Thompson

vc ++ 6.0 .cc dosyasını desteklemez.
xus

@KeithThompson kullanıcı user181548 cevap cehennem
Spyros Mourelatos

@SpyrosMourelatos Evet, ancak hala Unix benzeri sistemlerde C ++ kodunun .cppC ++ kaynak dosyaları için çok yaygın olarak kullanıldığı durumdur . (Atıfta bulunulan cevap "cpp" ın C önişlemcisinin kısaltması olduğunu belirtmektedir.)
Keith Thompson

79

.cppbildiğim kadarıyla C ++ için önerilen uzantıdır. Bazı insanlar .hppsadece C'den ayırt etmek için C ++ başlıkları için kullanılmasını bile önerir .

Derleyici ne yaptığınızı önemsemese de, kişisel tercih.


60
C ++ başlıkları için .h kullanarak .hpp kullanmaya geçiş karar verdi; öncelikle editörler gibi diğer araçların da bilmesi gerektiğinden - gcc ile önceden derlenmiş üstbilgiler kullanıldığında, ön derleme sırasında '-x c ++ - header' seçeneğini kullanmadığınız sürece .h dosyaları için C ve .hpp dosyaları için C ++ varsayılan olarak kullanılır. bir .h dosyası.
jdkoftinoff

5
@jd. Kabul. Eğer h / c dosyaları hpp / cpp dosyalarına dönüşürse, otomatikleştirilmiş araçları daha kolay hale getirir.
Paul Nathan

4
g ++ .hpp dosyasını bir C ++ üstbilgisi (başlık ön derlemesi için) olarak tanımıyor, ancak .hh biliyor. Bu nedenle gerçekten .cpp / .hpp üzerinde .cc / .hh kullanarak gerçek bir fark yoktur.
Tronic


3
@CharlesAddis - Evet, aynı dizinde "abcd.H" (c ++ arayüzü) ve "abcd.h" (C arayüzü) olan çok sayıda kodu "abcd.hpp" ve "abcd.h'ye dönüştürmek zorunda kaldım "çünkü sadece bir" svn co "yapmak veya bir Windows kutusuna veya Mac OS X kutusuna (varsayılan dosya sistemiyle)
sıkıştırmak

37

.ccUzantıyı uygulama dosyaları, .hhbaşlıklar ve .inlsatır içi / şablonlar için şahsen kullanıyorum .

Daha önce de belirtildiği gibi, esas olarak bir tat meselesidir.

Gördüğüm kadarıyla , .ccdaha "gibi görünüyor açık kaynak projeleri odaklı bunun ise stilleri kodlama bazı büyük açık kaynak yazılım tavsiye edilir olarak,". cppdaha Pencereli görünüyor.

--- DÜZENLE

Belirtildiği gibi, bu "gördüğümden" , yanlış olabilir. Sadece üzerinde çalıştığım tüm Windows projeleri kullanıldı .cppve bir çok açık kaynaklı proje (çoğunlukla unix benzeri) kullanıyorlar .cc.

Aşağıdaki kodlama stilleri örnekleri .cc:


1
buna referansınız var mı? Windows .cpp vs ÖSS .cc görmedim
bobby

6
Visual Studio, C ++ için .cpp dosyaları oluşturur. Arkasındaki tarihi bilmiyorum.
Natan Yellin

7
LLVM Kodlama Standardı .cpp / .h'yi savunuyor ve -*- C++ -*-etiketi llvm.org/docs/CodingStandards.html başlıklarına koyuyor gibi görünüyor ; Mozilla Kodlama Stili .cpp / .h geliştirici.mozilla.org /tr-TR/docs/Mozilla/ Developer_guide /… ; KDE, .cpp / .h'yi
sgittanin

19

Kullanılan diğer dosya uzantıları .cxxve .C(büyük C) içerir. Bjarne Stroustrup'un .Corijinal olarak kullanıldığına inanıyorum . .cppC ön işlemcisinin adıdır, bu yüzden C ++ için de kullanılması talihsiz bir durumdur.


13

Diğer seçenek ise , artı döndürülmüş 45 ° olması gerektiği .cxxyerdir x.

Windows, Mac ve Linux destekliyor, .c++bu yüzden bunu kullanmalıyız.


12

Birkaç kişi bir şey ifade .ccetmez diyor ? Olabilir. C ++ hayata "Sınıflarla C" olarak başladı.

Bunu doğrulayın .ccve .cppçoğu Unix sisteminde komut adlarıdır (sırasıyla c derleyici ve c önişlemcisi).

Sadece kullanıyorum .cppama Windows'ta başladım. .ccdaha fazla Unix sözleşmesi olmasına rağmen, orada daha da az görüyorum. GNU make için kurallar vardır, .cppbu muhtemelen tercih edilir, hem Windows hem de diğer her şeyde varsayılan olarak çalışır. Öte yandan modern C ++ başlıklar için hiçbir uzantı kullanmaz, gerçekten hoşuma gitmiyor. Tüm projelerim .hbaşlık dosyaları için kullanıyor ve hem C hem de C ++ 'ı mümkün olduğunca extern "C"test ederek destekliyorlar __cplusplus.


2
o zaman .cwc olmamalı mı? :)
Joshua

Birçok derleyici ad alanlarını desteklemeden önce, standart üstbilgiler için .h uzantısını da kullandılar. Derleyiciler, kütüphaneyi genel ad alanına yerleştiren kullanımdan kaldırılmış .h sürümleri sağlar. Bu eski kod desteği sağlar. Bir kez bir yerde okudum .h uzantılarının olmaması, standardın dosya değil, aslında 'yerleşik' olmasına izin vermesidir. Ancak bu kıyamet olabilir.
Clifford

11

Sadece proje / ekip tarafından kullanılan sözleşmeyi takip edin.


11

.ccÇalıştığım hiçbir projede şahsen hiç görmedim , ancak tüm teknikte derleyici umursamıyor.

Kimin umrunda olacak kaynak üzerinde çalışan geliştiriciler, bu yüzden benim başparmak kural benim takım rahat ile gitmek. Senin "takım" açık kaynak topluluğu ise, bunların çok yaygın bir şey, gitmek .cppfavori gibi görünüyor.


Github.com/google/googletest gibi çeşitli tanınmış projeler .ccC ++ uygulama dosyaları için bir dosya uzantısı olarak kullanılmaktadır
Vertexwahn

10

Çoğu stil sözleşmesinde olduğu gibi, sadece iki şey önemlidir:

  1. Mümkün olan yerlerde kullandığınız şeyde tutarlı olun.
  2. Kullanılan belirli bir seçime bağlı hiçbir şey tasarlamayın.

Bunlar çelişkili görünebilir, ancak her birinin kendi nedenleri için değeri vardır.


8

.Cve .ccgördüğüm (birkaç) Unix odaklı C ++ programı için standart gibi görünüyor. Her zaman .cppkendimi kullandım , çünkü sadece Windows üzerinde çalışıyorum ve bu sonsuza dek olduğu gibi standart oldu.

Şahsen tavsiye ederim .cpp, çünkü ... "C Plus Plus" anlamına geliyor. Bu dosya uzantıları kısaltmalar olduklarını hayati önem elbette, ancak bu gerekçe zorlayıcı diğer önemli şeyler shift tuşunun olmayan kullanımıdır (dışladı yetersiz ispatlamak zorundadır .Cve .c++hangi dışladı nerede (mümkünse) ve düzenli ifade metakarakterlerin kaçınma .c++- ne yazık ki .elbette kaçınamazsınız .).

Bu göz ardı edilmez .cc, bu yüzden gerçekten hiçbir şey için durmasa da (ya da öyle mi?) Linux tabanlı kod için muhtemelen iyi bir seçimdir.


2
Ancak "cpp" aynı zamanda "C önişlemcisi" anlamına da gelebilir. Aslında, sisteminizde "cpp" programı büyük olasılıkla C önişlemcidir ...
Jesper

8

Kaynak ve başlık için sırasıyla .C ve .h kullanıyorum. Bu seçimle ilgili güzel bir şey, komut satırında *.[Ch]tüm kod dosyalarını seçmek için kullanımı kolay olmasıdır . Kullanılması .Charf duyarsız dosyasistemlerinden bir sorun olabilir, ama eğer varsa foo.cve foo.Caynı dizinde, hak zaten olsun :)


8

.Cc uzantısı makefiles içinde örtük kurallar kullanmak için gereklidir. Makefiles'ları daha iyi anlamak için bu bağlantıları inceleyin, ancak .cc uzantısının yararlılığını açıkça söylediği için esas olarak ikincisine bakın:

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

Bunu şimdi öğrendim.


Yine bunlar sadece .cppdosya. Telaşa gerek yok ! :-)
Tom Taylor

1
"C ++ kaynak dosyaları için '.C' yerine '.cc' sonekini kullanmanızı öneririz." Bunun zavallı ifadeler olduğundan şüpheleniyorum. Büyük / .Cküçük harfe duyarlı olmayan dosya sistemlerine sahip sistemlerde kullanmak sorunlu olabilir. Ben herhangi bir avantaj kadarıyla orada olduğunu sanmıyorum makeilgilidir kullanarak, .ccüzerinde .cppörneğin. Makefiles .cppC ++ kaynak dosyaları için gayet iyi çalışıyor .
Keith Thompson

7

Bu uzantılardan hangisini kullanmanız önemli değildir. Hangisini daha çok seviyorsanız seçin, adlandırma ile tutarlı olun. Bu adlandırma kuralının farkında olduğum tek istisna WinDDK, dosyaları WDKderlemek için yapamadığım (veya şimdi mi?) .cc. Linux'ta bu bir sorun değil.


6

Yeni bir C ++ projesi başlatıyorum ve en son C ++ tarzında aramaya başladım. Buraya dosya adlandırma konusunda son verdim ve seçimimi nasıl bulduğumu paylaşacağımı düşündüm. İşte gidiyor:

Stroustrup bunu teknik bir düşünmeden ziyade bir ticari düşünce olarak görüyor .

Tavsiyesini takiben, alet zincirlerinin ne beklediğini kontrol edelim.

UNIX / Linux için, aşağıdaki varsayılan GNU yapma kurallarını .cc dosya adı sonekini tercih etmek olarak yorumlayabilirsiniz, çünkü .cpp ve .C kuralları yalnızca takma adlardır:

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

(Not: varsayılan COMPILE.cxx diğer adı yoktur)

UNIX / Linux'u hedefliyorsanız, hem .cc hem de .cpp çok iyi seçeneklerdir.

Windows'u hedeflerken, dosya sistemi büyük / küçük harfe duyarlı olmadığından .C ile ilgili sorun arıyorsunuz. Ve Visual Studio'nun .cpp son ekini desteklediğini not etmeniz önemlidir

MacOS'u hedeflerken, Xcode'un .cpp / .hpp'yi tercih ettiğini unutmayın (Xcode 10.1'de kontrol edilmiştir). Üstbilgi şablonunu her zaman .h kullanmak üzere değiştirebilirsiniz.

Değeri ne olursa olsun, kararınızı istediğiniz kod tabanlarına dayandırabilirsiniz. Google .cc ve LLVM libc ++ kullanır, örneğin .cpp kullanır.

Başlık dosyaları ne olacak? Bir C veya C ++ dosyası bağlamında derlenirler, bu nedenle .hpp dosyasını .hpp'den ayırmak için derleyici veya derleme sistemi gerekmez. Bununla birlikte, sözdizimi vurgulama ve düzenleyiciniz / IDE'niz tarafından otomatik girinti bir sorun olabilir, ancak bu, tüm .h dosyalarının bir C ++ moduna ilişkilendirilmesiyle giderilmiştir. Örnek olarak, Linux'taki emacs yapılandırmam tüm .h dosyalarını C ++ modunda yükler ve C başlıklarını iyi düzenler. Bunun ötesinde, C ve C ++ 'ı karıştırırken bu tavsiyeyi takip edebilirsiniz .

Benim kişisel sonucum : .cpp / .h en az direniş yoludur.


3

Diğerleri benden önce yazdığı gibi, sonunda projeniz / ekibiniz / şirketiniz tarafından kullanılan şeydir.

Şahsen, ccuzantı kullanmıyorum, uzantıların sayısını azaltmaya ve açık bir değer (benim görüşüme göre) olmadığı sürece bunları artırmaya çalışmıyorum.

Onun değeri için, ben ne kullanıyorum :

c - Sadece saf C kodu, hiçbir sınıf veya yöntemlerle yapıları.

cpp - C ++ kodu

hpp- Yalnızca üstbilgiler kodu. Uygulamalar başlıklarda (şablon sınıfları gibi)

h- C / C ++ için başlık dosyaları. Başka bir ayrımın yapılabileceğine katılıyorum, ancak yazdığım gibi, basitlik için uzantı sayısını azaltmaya çalışıyorum. En azından çalıştığım C ++ projelerinden, hpure-C dosyaları daha nadirdir, bu nedenle başka bir uzantı eklemek istemedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.