2009-10-09 59 views
400

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

Google style guide dường như đề xuất .cc, nhưng không 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.

+60

** Kết luận ** Không quan trọng. ** Nguồn gốc có thể ** cc = C với các lớp, cpp = C cộng với – Lazer

+4

Điều quan trọng đối với clang ++. Khi bạn cung cấp cho nó một tập tin tiêu đề C++ với một tên kết thúc bằng .h, clang ++ cảnh báo bạn. – allyourcode

+48

Hey, cái gì cho? Tại sao câu hỏi này đóng lại? Có rất nhiều câu trả lời dựa trên thực tế ở đây (mặc dù tôi thừa nhận rằng nhiều người chỉ là ý kiến ​​ngẫu nhiên). Tôi thấy không có lý do để tin rằng không có thông tin hữu ích hơn có thể được đăng. – allyourcode

Trả lời

490

Vào cuối ngày, nó không quan trọng vì trình biên dịch C++ có thể xử lý các tệp theo một trong hai định dạng. Nếu đó là 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ế.

+43

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

+170

cc nhanh hơn để nhập – thang

+3

@thang: Tôi đoán bạn đang mỉa mai, hay? –

58

.cpp là phần mở rộng được đề xuất cho C++ theo như tôi biết. Một số người thậm chí khuyên bạn nên sử dụng .hpp cho 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.

+42

Tôi quyết định chuyển từ sử dụng .h sang sử dụng .hpp cho tiêu đề C++; Ngoài ra khi sử dụng các công cụ biên tập khác 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++ - header' khi biên dịch trước tệp .h. – jdkoftinoff

+3

@jd. Đã đồng ý. Nó làm cho các công cụ tự động trở nên dễ dàng hơn một chút nếu các tệp h/c chuyển thành tệp hpp/cpp. –

+4

g ++ không nhận dạng .hpp dưới dạng tiêu đề C++ (để biên dịch trước tiêu đề) nhưng .hh. Bởi vì điều này tôi đã kết thúc bằng cách sử dụng .cc/.hh trên .cpp/.hpp như có thực sự không phải là bất kỳ sự khác biệt thực sự. – Tronic

10

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

14

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

5

cpp = c cộng với cộng và vì thế tôi thích, cc hoặc cxx là gì?

+55

cxx là c + + sau khi dấu cộng giảm. Chúng không ổn định, bạn biết đấy, đứng trên một điểm như thế. C là ổn định hơn. Đây cũng là cách Apple II bị tổn thương như Apple //. –

+4

@David - Có lẽ tôi thực sự già, nhưng tôi nhớ Apple II là "Apple] [". –

+0

@ David Oh Tôi chưa bao giờ nghĩ về điều đó. – Andrew

5

Việc bạn sử dụng tiện ích mở rộng nào không quan trọng. Chọn bất cứ điều gì bạn thích hơn, chỉ cần phù hợp với đặ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 bây giờ là WDK?) Để biên dịch .cc tệp. Trên Linux mặc dù đó không phải là một vấn đề.

9

Tùy chọn khác là .cxx trong đó x được coi là một điểm cộng được quay 45 °.

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

8

Cá nhân tôi chưa bao giờ thấy .cc trong bất kỳ dự án nào mà tôi đã làm việc, nhưng trong tất cả các 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 chung 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 thứ rất phổ biến, trong đó .cpp dường như là mục yêu thích.

6

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

  1. Hãy nhất quán với 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 kỳ thứ gì tùy thuộc vào lựa chọn cụ thể được sử dụng.

Chúng có vẻ mâu thuẫn nhau, nhưng mỗi giá trị đều có giá trị vì lý do riêng của chúng.

6

.C.cc dườ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 luôn sử dụng .cpp bả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 ở đó từ như mãi mãi.

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

Điều này không loại trừ .cc, vì vậy mặc dù nó không thực sự phù hợp với bất kỳ điều gì (hay không?) Nó có lẽ là một lựa chọn tốt cho mã hướng Linux.

+1

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

+7

Có lẽ '.cc' là viết tắt của" see? See? It worked! " – Joshua

+1

.cc = c w/classes .... C++ đã được gọi ORIGINALLY! @Joshua –

23

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

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

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

--- EDIT

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

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

+1

bạn có tham chiếu đến điều này không? Tôi chưa từng thấy OSS .cc và Windows .cpp – bobby

+4

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

+4

LLVM Coding Standard có vẻ là biện hộ cho .cpp/.h và đặt '- * - C++ - * -' tag vào các tiêu đề http://llvm.org/docs/CodingStandards.html; Mozilla Coding Style gợi ý .cpp/.h https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style; Có vẻ như KDE đang sử dụng .cpp/.h quá http://quickgit.kde.org/ – sastanin

8

Một số người nói .cc không đại diện cho bất cứ điều gì? Nó có thể. C++ bắt đầu cuộc sống là "C với các lớp học".

Đúng là .cc.cpp cũ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à bộ tiền xử lý c tương ứng).

Tôi chỉ sử dụng .cpp, nhưng tôi đã bắt đầu trên Windows. .cc là một quy ước của Unix, mặc dù tôi thấy nó ít và thậm chí ở đó. GNU đưa ra các quy tắc cho .cpp vì vậy có thể là ưu tiê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 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 .h cho các tệp tiêu đề và chúng hỗ trợ cả C và C++ nhiều nhất có thể qua extern "C" và thử nghiệm __cplusplus.

+1

không phải vậy .cwc thì sao? :) – Joshua

+0

Trước khi 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 tiêu đề chuẩn. Thông thường, các trình biên dịch cung cấp các phiên bản không được chấp nhận .h đặt thư viện đó vào không gian tên chung. Điều này cho phép hỗ trợ mã cũ. 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, nhưng về cơ bản là 'được tích hợp sẵn'. Tuy nhiên đó có thể là apocryphal. – Clifford

6

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

199

GNU GCC công nhận tất cả các dạng file sau C++, và sẽ sử dụng C++ biên dịch bất kể bạn gọi nó qua gcc hay g ++: .C, .cc, .cpp, .CPP, .c++, .cp hoặc .cxx.

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

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

+1

"trường hợp quan trọng trong GCC" - Điều gì về Windows (vì nó không phân biệt chữ hoa chữ thường)? –

+2

@Devesh: Windows cũng vậy. Nhưng hệ điều hành sẽ ngăn cản bạn có hai tập tin trong một thư mục phân biệt chỉ theo từng trường hợp. – Clifford

+7

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

128

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 biên dịch trong khi quyết định sử dụng phần mở rộng nào là cách tốt nhất để giúp tìm câu trả lời phù hợp với bạn .

Tôi chỉ muốn thêm thông tin sau để trợ giúp với một số thông tin .cc.cpp mà tôi đã tìm thấy. Các phần mở rộng sau bị phá vỡ bởi các môi trường khác nhau (từ "C++ Primer Plus" cuốn sách):

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: 01.

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 với .hpp.cpp để dễ dàng nhận dạng đa nền tảng/công cụ chéo.

+3

"Dựa trên bài viết này": Trên bài viết nào? –

+14

@phresnel this-> article – spider

+2

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

2

Tiện ích mở rộng .cc là cần thiết để sử dụng quy tắc ngầm trong tệp makefiles. Xem xét thông qua những liên kết này để có được một sự hiểu biết tốt hơn về makefiles, nhưng nhìn chủ yếu là thứ hai, vì nó rõ ràng nói tính hữu ích của phần mở rộng .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

Tôi chỉ học được những điều này hiện nay.

+0

Một lần nữa chúng chỉ là tập tin '.cpp'. Đừng lo lắng ! :-) – lsof

+0

Nó nói "Chúng tôi khuyến khích bạn sử dụng hậu tố '.cc' cho tệp nguồn C++ thay vì '.C'." Tôi nghi ngờ đó chỉ là từ ngữ nghèo nàn. Sử dụng '.C' có thể có vấn đề đối với các hệ thống có hệ thống tệp phân biệt chữ hoa chữ thường. Tôi không nghĩ rằng có bất kỳ lợi thế cụ thể, như xa như 'make' là có liên quan, trong việc sử dụng' .cc' trên '.cpp', ví dụ. Makefiles hoạt động tốt với '.cpp' cho các tệp nguồn C++. –

Các vấn đề liên quan