C ++ mở rộng tập tin mã? .cc so với .cpp [đã đóng]


599

Tôi đã thấy mã C ++ được lưu dưới dạng cả hai .cc.cpptệp. Có điểm khác biệt gì giữa hai thứ này không?

Các hướng dẫn phong cách Google dường như đề nghị .cc, nhưng không cung cấp lời giải thích.

Tôi chủ yếu quan tâm đến các chương trình trên hệ thống Linux.


85
Kết luận Nó không thành vấn đề. Nguồn gốc có thể cc = C với các lớp, cpp = C cộng với cộng
Lazer

6
Nó quan trọng để kêu vang ++. Khi bạn cung cấp cho nó một tệp tiêu đề C ++ với tên kết thúc bằng .h, clang ++ sẽ cảnh báo bạn.
mã allyour

4
Một công cụ khác quan tâm một chút là emacs. Với cấu hình .emacs sạch, mở ("tìm" theo cách nói của emacs), tệp .h kích hoạt chế độ c, không phải c ++ - chế độ. Tất nhiên, bạn có thể định cấu hình emacs để làm một cái gì đó khác (như với mọi thứ trong emacs), nhưng quan điểm của tôi là chế độ c là mặc định bên ngoài.
mã allyour

3
lintquan tâm, .Clà C ++ và .clà C không hiểu gì về .cchoặc .cpp. Ít nhất là trên AIX 6.1.
Jesse Chisholm

5
Trả lời "không thành vấn đề" không thực sự có ích. Câu hỏi hoàn toàn phù hợp. OP đang tìm kiếm một quy ước vững chắc để gắn bó. Một câu trả lời tốt hơn sẽ là: "Thật không may, cộng đồng C ++ không có một quy ước vững chắc về vấn đề này". Thật buồn, nếu bạn nghĩ về nó. Tất cả các ngôn ngữ phổ biến khác dường như có một phần mở rộng tệp duy nhất. Tôi sẽ gắn bó với những gì một dự án quan trọng sử dụng, như gcc. Họ sử dụng.cc .
Lucio Paiva

Câu trả lời:


703

Vào cuối ngày, điều đó không thành vấn đề vì trình biên dịch C ++ có thể xử lý các tệp ở cả hai định dạng. Nếu đó là một vấn đề thực sự trong nhóm của bạn, hãy lật một đồng xu và chuyển sang công việc thực tế.


89
Vâng, đó là một điểm hợp lệ, nhưng nó không trả lời câu hỏi của người dùng.
vikrantt

319
cc nhanh hơn để gõ
thang

50
Tại sao đây là câu trả lời được chấp nhận? Một lập trình viên mới hơn sẽ không biết rằng điều đó không quan trọng và họ xứng đáng nhận được câu trả lời thẳng thắn.
Robben_Ford_Fan_boy

14
Câu trả lời là hoàn toàn không đủ cho một lập trình viên tò mò và có đầu óc. Tôi muốn câu trả lời trên trang này nhiều hơn vì nó có giải thích chi tiết hơn.
Novin Shahroudi

2
Khi một người cho rằng trình biên dịch thường không phải là công cụ duy nhất liên quan - hầu như luôn luôn có "tiện ích" hoặc một tiện ích tương tự S care quan tâm đến phần mở rộng nào bạn sử dụng, để phù hợp với quy tắc xây dựng - thì câu trả lời này thực sự không giải quyết được cốt lõi mối quan tâm của câu hỏi. Lưu ý rằng có các biến thể theo hệ thống và theo chuỗi công cụ (bao gồm các quy tắc tạo yêu thích của bạn, v.v.) sẽ có tác động đến quyết định. Chẳng hạn, hệ thống xây dựng đa mục tiêu đệ quy mặc định, một số trong loạt nền tảng phát triển QNX 6 không chọn các tệp * .cpp làm nguồn ngôn ngữ C ++; nó muốn .cc
JoGusto

296

GNU GCC công nhận tất cả những điều sau đây là các file C ++, và sẽ sử dụng C ++ biên soạn cho dù bạn gọi nó thông qua gcc hoặc g ++: .C, .cc, .cpp, .CPP, .c++, .cp, hoặc .cxx.

Lưu ý .C- trường hợp quan trọng trong GCC, .clà tệp C trong khi đó .Clà tệp C ++ (nếu bạn để trình biên dịch quyết định nó đang biên dịch cái gì).

GCC cũng hỗ trợ các hậu tố khác để biểu thị xử lý đặc biệt, ví dụ: một .iitệp sẽ được biên dịch thành C ++, nhưng không được xử lý trước (dành cho mã được xử lý trước riêng biệt). Tất cả các hậu tố được công nhận được chi tiết tại gcc.gnu.org


5
"Các vấn đề trong GCC" - Thế còn Windows (vì nó không phân biệt chữ hoa chữ thường)?
Devesh Khandelwal

17
@Devesh: Windows cũng vậy. Nhưng HĐH sẽ ngăn bạn có hai tệp trong một thư mục được phân biệt chỉ theo từng trường hợp.
Clifford

23
@DeveshKhandelwal Nhưng đó là bảo quản trường hợp
Yatharth Agarwal

229

Lời khuyên tuyệt vời về việc sử dụng cho makefile và các công cụ khác, xem xét các công cụ không phải trình biên dịch trong khi quyết định sử dụng tiện ích mở rộng nào là cách tiếp cận tuyệt vời để giúp tìm câu trả lời phù hợp với bạn.

Tôi chỉ muốn thêm những điều sau đây để giúp đỡ với một số .ccvs .cppthông tin mà tôi tìm thấy. Sau đây là các tiện ích mở rộng được chia nhỏ theo các môi trường khác nhau (từ sách "C ++ Primer Plus"):

Unix sử dụng: .C, .cc, .cxx,.c

GNU C ++ sử dụng: .C, .cc, .cxx, .cpp,.c++

Digital Mars sử dụng: .cpp,.cxx

Borland C ++ sử dụng: .cpp

Watcom sử dụng: .cpp

Microsoft Visual C ++ sử dụng: .cpp, .cxx,.cc

Metrowerks CodeWarrior sử dụng: .cpp, .cp, .cc, .cxx,.c++

Các môi trường khác nhau hỗ trợ các phần mở rộng khác nhau. Tôi cũng đang tìm cách trả lời câu hỏi này và tìm thấy bài đăng này. Dựa trên bài đăng này, tôi nghĩ rằng tôi có thể đi cùng .hpp.cppđể dễ nhận biết đa nền tảng / công cụ chéo.


5
Câu trả lời này là gần nhất so với những người khác trong việc thực sự cố gắng giải quyết câu hỏi được đưa ra, đó là về một người đang tìm kiếm một quy ước vững chắc để tuân theo. Các ngôn ngữ khác có điều đó, nhưng khi có liên quan đến phần mở rộng tập tin, C ++ dường như thiếu nó.
Lucio Paiva

6
Theo nghĩa nào Unix không sử dụng .cpp?
Keith Thompson

vc ++ 6.0 không hỗ trợ tập tin .cc.
xus

@KeithThndry cehck câu trả lời của người dùng181548
Spyros Mourelatos

@SpyrosMourelatos Có, nhưng vẫn có trường hợp mã C ++ trên các hệ thống giống Unix thường được sử dụng .cppcho các tệp nguồn C ++. (Câu trả lời được trích dẫn lưu ý rằng "cpp" là tên viết tắt của bộ tiền xử lý C.)
Keith Thompson

79

.cpplà phần mở rộng được đề nghị cho C ++ như xa như tôi biết. Một số người thậm chí khuyên bạn nên sử dụng .hppcho các tiêu đề C ++, chỉ để phân biệt với C.

Mặc dù trình biên dịch không quan tâm đến những gì bạn làm, đó là sở thích cá nhân.


60
Tôi quyết định chuyển từ sử dụng .h sang sử dụng .hpp cho các tiêu đề c ++; chủ yếu là vì các công cụ khác như trình soạn thảo cũng cần phải biết - Ngoài ra, khi sử dụng các tiêu đề được biên dịch trước với gcc, nó mặc định sử dụng C cho các tệp .h và C ++ cho các tệp .hpp trừ khi bạn sử dụng tùy chọn '-x c ++ - tiêu đề' khi biên dịch trước một tập tin .h.
jdkoftinoff

5
@jd. Đã đồng ý. Nó làm cho các công cụ tự động dễ dàng hơn một chút nếu các tệp h / c biến thành các tệp hpp / cpp.
Paul Nathan

4
g ++ không nhận ra .hpp là một tiêu đề C ++ (để tiền biên dịch tiêu đề) nhưng .hh thì có. Vì điều này, tôi đã kết thúc bằng cách sử dụng .cc / .hh trên .cpp / .hpp vì thực sự không có sự khác biệt thực sự nào.
Tronic


3
@CharlesAddis - Có, tôi đã phải chuyển đổi rất nhiều mã có "abcd.H" (giao diện c ++) và "abcd.h" (giao diện C) trong cùng thư mục thành "abcd.hpp" và "abcd.h "bởi vì chỉ thực hiện" svn co "hoặc giải nén vào hộp Windows hoặc hộp Mac OS X (với hệ thống tệp mặc định) sẽ không thành công do" tên tệp trùng lặp "
jdkoftinoff

37

Cá nhân tôi sử dụng .cctiện ích mở rộng cho các tệp triển khai, .hhcho các tiêu đề và .inlcho nội tuyến / mẫu.

Như đã nói, nó chủ yếu là một vấn đề của hương vị.

Từ những gì tôi đã nhìn thấy , .cccó vẻ là nhiều hơn " dự án mã nguồn mở theo định hướng ", vì nó được thông báo trong một số phần mềm mã nguồn mở lớn mã hóa phong cách, trong khi đó. cppcó vẻ là Windowish hơn.

--- BIÊN TẬP

Như đã đề cập, đây là "từ những gì tôi đã thấy" , nó có thể sai. Chỉ là tất cả các dự án Windows mà tôi đã làm việc đã sử dụng .cppvà rất nhiều dự án nguồn mở (chủ yếu là sử dụng unix-like) .cc.

Ví dụ mã hóa phong cách sử dụng .cc:


1
Bạn có một tài liệu tham khảo về điều này? Tôi chưa bao giờ thấy OSS .cc so với Windows .cpp
bboy

6
Visual Studio tạo các tệp .cpp cho C ++. Tôi không biết lịch sử đằng sau nó.
Natan Yellin

7
LLVM Mã hóa Chuẩn dường như ủng hộ cho cpp / h và đưa -*- C++ -*-thẻ trong tiêu đề llvm.org/docs/CodingStandards.html ; Mozilla Mã hóa Phong cách gợi ý cpp / h developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/... ; KDE dường như đang sử dụng .cpp / .h quá quickgit.kde.org
sastanin 17/05/2015

19

Các phần mở rộng tệp khác được sử dụng bao gồm .cxx.C(viết hoa C). Tôi tin rằng Bjarne Stroustrup được sử dụng .Cban đầu. .cpplà tên của bộ tiền xử lý C, thật không may là nó cũng được sử dụng cho C ++.


13

Tùy chọn khác là .cxxnơi xđược cho là cộng 45 °.

Windows, Mac và Linux đều hỗ trợ .c++vì vậy chúng ta chỉ nên sử dụng nó.


12

Một số người nói .cckhông đại diện cho bất cứ điều gì? Nó có thể. C ++ bắt đầu cuộc sống như "C with Classes".

Đúng như vậy .cc.cppcũng là tên lệnh trên hầu hết các hệ thống Unix (trình biên dịch c và tiền xử lý c tương ứng).

Tôi sử dụng .cppđộc quyền, nhưng tôi đã bắt đầu trên Windows. .cclà một quy ước Unix, mặc dù tôi thấy nó ngày càng ít đi. GNU make có các quy tắc .cppvì vậy có lẽ được ưa thích hơn, nó sẽ hoạt động theo mặc định trên cả Windows và mọi thứ khác. Mặt khác, C ++ hiện đại không sử dụng phần mở rộng nào cho các tiêu đề, tôi thực sự không thích điều đó. Tất cả các dự án của tôi sử dụng .hcho các tệp tiêu đề và chúng hỗ trợ cả C và C ++ nhiều nhất có thể thông qua extern "C"và thử nghiệm __cplusplus.


2
Không nên như vậy .cwc? :)
Joshua

Trước nhiều trình biên dịch hỗ trợ không gian tên, chúng cũng đã sử dụng phần mở rộng .h cho các tiêu đề tiêu chuẩn. Thông thường, trình biên dịch cung cấp các phiên bản .h không dùng nữa, đặt thư viện vào không gian tên toàn cục. Điều này cho phép hỗ trợ mã kế thừa. Tôi đã đọc ở đâu đó một lần rằng lý do họ không có phần mở rộng .h là tiêu chuẩn cho phép chúng không phải là tệp, mà về cơ bản là 'tích hợp'. Tuy nhiên đó có thể là ngày tận thế.
Clifford

11

Chỉ cần làm theo quy ước đang được sử dụng cho dự án / nhóm.


11

Cá nhân tôi chưa từng thấy .cctrong bất kỳ dự án nào mà tôi đã làm việc, nhưng về mặt kỹ thuật, trình biên dịch sẽ không quan tâm.

Ai sẽ quan tâm là các nhà phát triển làm việc trên nguồn của bạn, vì vậy quy tắc ngón tay cái của tôi là đi theo những gì nhóm của bạn cảm thấy thoải mái. Nếu "nhóm" của bạn là cộng đồng nguồn mở, hãy đi với một cái gì đó rất phổ biến, trong đó .cppdường như được yêu thích.


Một số dự án nổi tiếng như github.com/google/googletest đang sử dụng .cclàm phần mở rộng tệp cho các tệp triển khai của C ++
Vertexwahn

10

Như với hầu hết các quy ước phong cách, chỉ có hai điều quan trọng:

  1. Hãy nhất quán trong những gì bạn sử dụng, bất cứ nơi nào có thể.
  2. Không thiết kế bất cứ điều gì mà phụ thuộc vào một sự lựa chọn cụ thể được sử dụng.

Những điều đó có vẻ mâu thuẫn, nhưng mỗi người đều có giá trị vì lý do riêng của họ.


8

.C.ccdường như là tiêu chuẩn cho (vài) chương trình C ++ hướng Unix mà tôi đã thấy. Tôi đã luôn sử dụng .cppbản thân mình, vì tôi chỉ thực sự làm việc trên Windows và đó là tiêu chuẩn ở đó mãi mãi.

Tôi khuyên bạn nên .cppcá nhân, vì ... nó là viết tắt của "C Plus Plus". Tất nhiên, điều cực kỳ quan trọng là phần mở rộng tệp là từ viết tắt, nhưng lý do này chứng minh không đủ sức thuyết phục những điều quan trọng khác là không sử dụng phím shift (loại trừ .C.c++) và tránh các siêu ký tự biểu thức chính quy nếu có thể (loại trừ .c++- Thật không may, bạn thực sự không thể tránh được ..).

Điều này không loại trừ .cc, vì vậy mặc dù nó không thực sự đại diện cho bất cứ điều gì (hoặc hiện nó?) Nó có lẽ là một lựa chọn tốt cho mã Linux theo định hướng.


2
Nhưng "cpp" cũng có thể là viết tắt của "C tiền xử lý". Trên thực tế, chương trình "cpp" trên hệ thống của bạn rất có thể là bộ tiền xử lý C ...
Jesper

8

Tôi đã sử dụng .C và .h tương ứng cho nguồn và tiêu đề. Một điều tuyệt vời với lựa chọn đó là, trên dòng lệnh, thật dễ sử dụng *.[Ch]để chọn tất cả các tệp mã. Việc sử dụng .Ccó thể là một vấn đề trong các hệ thống tập tin không nhạy cảm, nhưng nếu bạn có foo.cfoo.Ctrong cùng một thư mục, bạn xứng đáng với những gì bạn nhận được :)


8

Phần mở rộng .cc là cần thiết để sử dụng các quy tắc ngầm trong tệp thực hiện. Xem qua các liên kết này để hiểu rõ hơn về tệp tạo tệp, nhưng chủ yếu nhìn vào liên kết thứ hai, vì nó nói rõ sự hữu ích của phần mở rộng .cc:

ftp://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_ch CHƯƠNG / make_2.html

https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_ch CHƯƠNG / make_10.html

Tôi mới học được điều này bây giờ.


Một lần nữa chúng chỉ là .cpptập tin. Đừng lo lắng ! :-)
Tom Taylor

1
Nó nói "Chúng tôi khuyến khích bạn sử dụng hậu tố '.cc' cho các tệp nguồn C ++ thay vì '.C'." Tôi nghi ngờ đó chỉ là từ ngữ kém. Việc sử dụng .Ccó thể có vấn đề trên các hệ thống có hệ thống tệp không phân biệt chữ hoa chữ thường. Tôi không nghĩ rằng có bất kỳ lợi thế đặc biệt nào, makeliên quan đến việc sử dụng .cchơn .cpp, chẳng hạn. Makefiles chỉ hoạt động tốt với .cppcác tệp nguồn C ++.
Keith Thompson

7

Không quan trọng bạn sử dụng tiện ích mở rộng nào. Chọn bất cứ thứ gì bạn thích hơn, chỉ cần phù hợp với cách đặt tên. Ngoại lệ duy nhất tôi biết với quy ước đặt tên này là tôi không thể thực hiện WinDDK(hoặc WDKbây giờ là?) Để biên dịch .cccác tệp. Trên Linux mặc dù đó là khó có một vấn đề.


6

Tôi đang bắt đầu một dự án C ++ mới và bắt đầu tìm kiếm phiên bản C ++ mới nhất. Tôi đã kết thúc ở đây về việc đặt tên tập tin và tôi nghĩ rằng tôi sẽ chia sẻ làm thế nào tôi đưa ra lựa chọn của mình. Đây là:

Stroustrup coi điều này như một sự cân nhắc kinh doanh hơn là một kỹ thuật .

Theo lời khuyên của anh ấy, hãy kiểm tra những gì các công cụ mong đợi.

Đối với UNIX / Linux, bạn có thể hiểu các quy tắc GNU mặc định sau đây là ưu tiên cho hậu tố tên tệp .cc, vì các quy tắc .cpp và .C chỉ là bí danh:

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

(Lưu ý: không có bí danh COMPILE.cxx mặc định)

Vì vậy, nếu bạn đang nhắm mục tiêu UNIX / Linux, cả .cc và .cpp đều là những lựa chọn rất tốt.

Khi nhắm mục tiêu Windows, bạn đang tìm kiếm sự cố với .C, vì hệ thống tệp của nó không phân biệt chữ hoa chữ thường. Và điều quan trọng là bạn cần lưu ý rằng Visual Studio ủng hộ hậu tố .cpp

Khi nhắm mục tiêu macOS, lưu ý rằng Xcode thích .cpp / .hpp (chỉ được kiểm tra trên Xcode 10.1). Bạn luôn có thể thay đổi mẫu tiêu đề để sử dụng .h.

Đối với những gì nó có giá trị, bạn cũng có thể dựa trên quyết định của bạn dựa trên các cơ sở mã mà bạn thích. Google sử dụng .cc và LLVM libc ++ sử dụng .cpp chẳng hạn.

Còn các tệp tiêu đề thì sao? Chúng được biên dịch theo ngữ cảnh của tệp C hoặc C ++, do đó không có trình biên dịch hoặc hệ thống xây dựng cần phân biệt .h với .hpp. Tuy nhiên, việc tô sáng cú pháp và thụt lề tự động bởi trình soạn thảo / IDE của bạn có thể là một vấn đề, nhưng điều này được khắc phục bằng cách liên kết tất cả các tệp .h với chế độ C ++. Ví dụ, cấu hình emacs của tôi trên Linux tải tất cả các tệp .h ở chế độ C ++ và nó chỉnh sửa các tiêu đề C tốt. Ngoài ra, khi trộn C và C ++, bạn có thể làm theo lời khuyên này .

Kết luận cá nhân của tôi : .cpp / .h là con đường ít kháng cự nhất.


3

Như những người khác đã viết trước tôi, cuối cùng, những gì đang được sử dụng bởi dự án / nhóm / công ty của bạn.

Cá nhân, tôi không sử dụng cctiện ích mở rộng, tôi đang cố gắng giảm số lượng tiện ích mở rộng và không tăng chúng, trừ khi có giá trị rõ ràng (theo ý kiến ​​của tôi).

Đối với giá trị của nó, đây là những gì tôi đang sử dụng :

c - Chỉ mã C thuần túy, không có lớp hoặc cấu trúc với các phương thức.

cpp - Mã C ++

hpp- Tiêu đề chỉ mã. Việc triển khai nằm trong các tiêu đề (như các lớp mẫu)

h- tệp tiêu đề cho cả C / C ++. Tôi đồng ý một sự khác biệt khác có thể được thực hiện, nhưng như tôi đã viết, tôi đang cố gắng giảm số lượng tiện ích mở rộng cho đơn giản. Ít nhất là từ các dự án C ++ mà tôi đã làm việc, hcác tệp cho Pure-C hiếm hơn, do đó tôi không muốn thêm một tiện ích mở rộng khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.