C++代码文件扩展名?.cc vs .cpp

Jes*_*ica 545 c++ filenames

我已经看到C++代码保存为文件.cc.cpp文件.这两者有区别吗?

谷歌的风格指南似乎在暗示.cc,但没有提供任何解释.

我主要关注Linux系统上的程序.

Jar*_*Par 645

在一天结束时无关紧要,因为C++编译器可以处理任何格式的文件.如果这是您团队中的一个真正问题,请翻转硬币并继续实际工作.

  • cc输入速度更快 (275认同)
  • 嗯,这是一个有效的观点,但它没有回答用户的问题. (73认同)
  • 为什么这是公认的答案?一个新的程序员不会知道它没关系,他们应该得到一个直截了当的答案. (36认同)
  • 答案对于一个好奇和有意识的程序员来说是绝对不够的.我更喜欢[本页](/sf/ask/1301309481/)上的答案,因为它更详细解释. (10认同)
  • @thang:我猜你是讽刺的,还是? (8认同)
  • @thang更多的人应该这样想:D (5认同)
  • 文件扩展名!= 文件格式。 (3认同)
  • 当人们认为编译器通常不是唯一的工具时-几乎总是存在“ make”或类似的实用程序,它将关心您使用哪些扩展名以进行构建规则匹配-那么,这个答案确实没有解决核心问题。问题的关注。请注意,系统和工具链(包括您喜欢的制作规则等)会有所不同,这会对决策产生影响。例如,在QNX 6系列开发平台中,某些默认的递归多目标构建系统不会将* .cpp文件用作C ++语言源;它不会将* .cpp文件用作C ++语言源。它想要.cc (2认同)

Cli*_*ord 272

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上详细说明

  • @DeveshKhandelwal但它保留了案​​例 (18认同)
  • @Devesh:Windows也是.但操作系统会阻止您在仅按大小写区分的文件夹中包含两个文件. (11认同)
  • "GCC中的案例问题" - Windows(因为它不区分大小写)怎么样? (3认同)

Joh*_* S. 198

关于哪些用于makefile和其他工具的好建议,考虑非编译器工具,同时决定使用哪个扩展是帮助找到适合您的答案的好方法.

我只是想添加以下内容来帮助我找到的一些.ccvs .cpp信息.以下是按不同环境细分的扩展(来自"C++ Primer Plus"一书):

UNIX使用:.C,.cc,.cxx,.c

GNU C++使用: .C,.cc,.cxx,.cpp,.c++

数字火星使用: .cpp,.cxx

Borland C++使用: .cpp

Watcom使用: .cpp

微软的Visual C++使用: .cpp,.cxx,.cc

Metrowerks CodeWarrior开发用途: .cpp,.cp,.cc,.cxx,.c++

不同的环境支持不同的扩展.我也想回答这个问题并找到了这篇文章.基于这个职位,我想我可能会去.hpp.cpp便于跨平台/跨工具的认可.

  • Unix在什么意义上不使用`.cpp`? (4认同)
  • 这个答案在真正试图解决所提出的问题方面比其他人更接近,这是关于某人正在寻找一个坚实的惯例.其他语言也有,但就文件扩展而言,C++似乎缺乏它. (3认同)

Ryu*_*Ryu 70

.cpp据我所知,是C++的推荐扩展.有些人甚至建议使用.hppC++标头,只是为了区别于C.

虽然编译器不关心你做什么,但它是个人偏好.

  • 我决定从使用.h切换到使用.hpp来转换c ++标头; 主要是因为编辑器之类的其他工具也需要知道 - 此外,当使用带有gcc的预编译头文件时,除非在预编译时使用'-x c ++ - header'选项,否则默认使用C表示.h文件和C++表示.hpp文件一个.h文件. (56认同)
  • @Tronic:由于4.3 gcc识别.hpp,请将http://gcc.gnu.org/onlinedocs/gcc-4.2.4/gcc/Overall-Options.html与http://gcc.gnu.org/onlinedocs/gcc进行比较-4.3.6/GCC /总-Options.html (11认同)
  • @jd.同意.如果h/c文件变成hpp/cpp文件,它会使自动化工具更容易一些. (4认同)
  • g ++不会将.hpp识别为C++标头(用于标头预编译),但它确实如此.因此,我最终使用.cc/.hh而不是.cpp/.hpp,因为确实没有任何真正的区别. (4认同)
  • @CharlesAddis - 是的,我必须在同一目录中将"abcd.H"(c ++接口)和"abcd.h"(C接口)的大量代码转换为"abcd.hpp"和"abcd.h" "因为只是做一个"svn co"或解压缩到Windows机箱或Mac OS X机箱(使用默认文件系统)将因"重复文件名"而失败 (3认同)

New*_*biZ 33

我个人使用.cc扩展实现文件,.hh标题和.inl内联/模板.

如前所述,主要是品味问题.

从我所看到的,.cc似乎是更多的" 开源项目导向 ",因为它建议在一些伟大的开源软件编码风格,而.cpp似乎更像是Windowish.

---编辑

如上所述,这是"从我所看到的",它可能是错的.这只是我使用过的所有Windows项目.cpp,以及许多开源项目(主要是unix-like)使用.cc.

示例编码样式使用.cc:

  • Visual Studio为C++创建.cpp文件.我不知道背后的历史. (6认同)
  • LLVM编码标准似乎主张.cpp/.h并在标题http://llvm.org/docs/CodingStandards.html中添加` - * - C++ - * - `标记; Mozilla Coding Style建议.cpp/.h https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style; KDE似乎也在使用.cpp/.h http://quickgit.kde.org/ (6认同)

小智 18

使用的其他文件扩展名包括.cxx.C(大写C).我相信Bjarne Stroustrup .C最初使用过..cpp是C预处理器的名称,所以不幸的是它也用于C++.


Rol*_*ien 12

另一种选择是.cxx,其中x被认为是一个加旋转45°.

Windows,Mac和Linux都支持,.c++所以我们应该使用它.

  • “_x 应该是一个加号旋转_”lmao,c++ dweebs 会做任何事情,除了字面上使用 `.c++` 、 `.h++` (2认同)
  • @JUDEDAILY 这里闻起来像 DOS/Windows (2认同)

Ben*_*n S 11

只需按照项目/团队使用的惯例.


Toj*_*oji 10

我个人从未.cc在任何项目中看到我曾经参与过的工作,但从技术上讲,编译器并不关心.

谁会关心开发人员,因此我的经验法则是与您的团队合作.如果您的"团队"是开源社区,请选择一些非常常见的东西,其中.cpp似乎是最受欢迎的.


Ben*_*igt 10

有几个人说.cc不代表什么?它可能.C++起源于"C with Classes".

是的,.cc并且.cpp在大多数Unix系统上也是命令名(分别是c编译器和c预处理器).

我只使用.cpp,但我开始使用Windows..cc更像是一个Unix惯例,虽然我看到它越来越少了.GNU make有.cpp可能是首选的规则,默认情况下它可以在Windows和其他所有内容中使用.另一方面,现代C++根本不使用扩展,我真的不喜欢它.我的所有项目都.h用于头文件,它们通过extern "C"和测试尽可能地支持C和C++ __cplusplus.

  • 那不应该是 .cwc 吗?:) (2认同)

Dmi*_*try 8

你使用哪些扩展并不重要.选择你喜欢的更多,只需与命名一致.我知道这个命名约定的唯一例外是我无法编译WinDDK(或WDK现在是?)编译.cc文件.在Linux上,虽然这几乎不是问题.


Ala*_*lan 8

与大多数样式约定一样,只有两件事重要:

  1. 尽可能保持一致使用.
  2. 不要设计任何取决于所使用的特定选择的东西.

这些似乎可能相互矛盾,但它们各自都有其自身原因的价值.


小智 8

.C并且.cc似乎是我见过的(少数)面向Unix的C++程序的标准.我一直都在使用.cpp自己,因为我只是真的在Windows上工作,而且那是永远的标准.

.cpp个人推荐,因为......它代表"C Plus Plus".当然,最重要的是文件扩展名是首字母缩略词,但是如果这个基本原理证明不够引人注目,那么其他重要的事情就是不使用shift键(它排除.C和使用.c++)并尽可能避免使用正则表达式元字符(它排除了.c++-不幸的是,你.当然不能真正避免.)

这不排除.cc,所以即使它并不真正代表什么(或者它是什么?)它可能是面向Linux的代码的一个很好的选择.

  • 但"cpp"也可以代表"C预处理器".事实上,你的系统上的程序"cpp"很可能是C预处理器...... (2认同)

Kei*_*thB 7

我分别使用.C和.h作为源和标题.这个选择的一个好处是,在命令行上,它易于使用*.[Ch]来选择所有代码文件.使用.C可能是不区分大小写的文件系统的问题,但如果你有foo.cfoo.C在同一目录中,你应该得到你得到的:)


TCS*_*TCS 7

正如其他人在我之前写的那样,最后是您的项目/团队/公司所使用的内容。

就我个人而言,我没有使用cc扩展,我试图减少扩展的数量而不是增加它们,除非有一个明确的值(在我看来)。

就其价值而言,这就是我正在使用的

c- 仅纯 C 代码,没有带方法的类或结构。

cpp- C++代码

hpp- 仅标题代码。实现位于标题中(如模板类)

h- C/C++ 的头文件。我同意可以进行另一种区分,但正如我所写,为了简单起见,我试图减少扩展的数量。至少从我参与过的C++项目来看,h纯C的文件比较少见,因此我不想添加另一个扩展名。


小智 6

.cc扩展名是在makefile中使用隐式规则所必需的.查看这些链接以更好地理解makefile,但主要看第二个,因为它清楚地说明了.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

我现在才知道这件事.

  • 它说“我们鼓励您对 C++ 源文件使用后缀 '.cc' 而不是 '.C'。” 我怀疑这只是措辞不当。在具有不区分大小写的文件系统的系统上使用 `.C` 可能会出现问题。例如,就“make”而言,我认为使用“.cc”而不是“.cpp”并没有什么特别的优势。Makefile 与 C++ 源文件的`.cpp` 一起工作得很好。 (2认同)

小智 6

我正在开始一个新的 C++ 项目并开始寻找最新的 C++ 风格。我结束了关于文件命名的问题,我想我会分享我是如何提出我的选择的。开始:

Stroustrup 将此更多地视为业务考虑而非技术考虑

按照他的建议,让我们检查一下工具链的期望。

对于 UNIX/Linux,您可以将以下默认 GNU make 规则解释为偏爱 .cc 文件名后缀,因为 .cpp 和 .C 规则只是别名:

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

(注意:没有默认的 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++ 模式来解决此问题。例如,我在 Linux 上的 emacs 配置以 C++ 模式加载所有 .h 文件,它可以很好地编辑 C 头文件。除此之外,在混合 C 和 C++ 时,您可以遵循此建议

我个人的结论.cpp/.h是阻力最小的路径。