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

问题描述 投票:496回答:18

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

Google style guide似乎暗示.cc,但没有提供任何解释。

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

c++ filenames
18个回答
610
投票

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


10
投票

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

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

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


8
投票

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

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

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


8
投票

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


7
投票

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

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

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


7
投票

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


6
投票

cpp = c plus plus因此我首选,cc或cxx代表什么?


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

我现在才知道这件事。


1
投票

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

Stroustrup认为这更像是a business consideration than a technical one

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

对于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)

(注意:没有默认的COMPILE.cxx别名)

因此,如果您的目标是UNIX / Linux,那么.cc和.cpp都是非常好的选择。

在针对Windows时,您正在寻找.C的问题,因为它的文件系统不区分大小写。你可能需要注意Visual Studio favors the .cpp suffix

在定位macOS时,请注意Xcode更喜欢.cpp / .hpp(刚刚在Xcode 10.1上检查过)。您始终可以更改标题模板以使用.h。

对于它的价值,您还可以根据自己喜欢的代码基础做出决定。例如,Google uses .cc和LLVM libc ++使用.cpp。

头文件怎么样?它们是在C或C ++文件的上下文中编译的,因此没有编译器或构建系统需要区分.h和.hpp。然而,编辑器/ IDE的语法突出显示和自动缩进可能是个问题,但是通过将所有.h文件关联到C ++模式可以解决这个问题。例如,我在Linux上的emacs配置在C ++模式下加载所有.h文件,它编辑C头就好了。除此之外,在混合使用C和C ++时,您可以遵循此advice

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


0
投票

CC是c ++程序中使用的源代码文件的扩展。可以使用各种文本编辑器编辑这些CC文件,但这些文件不可读。


255
投票

GNU GCC将以下所有内容识别为C ++文件,无论您是通过gcc还是g ++调用它们都将使用C ++编译:.C.cc.cpp.CPP.c++.cp.cxx

注意.C - 在GCC中的情况,.c是一个C文件而.C是一个C ++文件(如果你让编译器决定它编译的是什么)。

GCC还支持其他后缀来指示特殊处理,例如,.ii文件将被编译为C ++,但不进行预处理(用于单独的预处理代码)。所有公认的后缀都在gcc.gnu.org详细说明


175
投票

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

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

Unix使用:.C.cc.cxx.c

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

数字火星使用:.cpp.cxx

Borland C ++使用:.cpp

Watcom使用:.cpp

Microsoft Visual C ++使用:.cpp.cxx.cc

Metrowerks CodeWarrior使用:.cpp.cp.cc.cxx.c++

不同的环境支持不同的扩展。我也想回答这个问题并找到了这篇文章。基于这篇文章,我想我可能会选择.hpp.cpp来简化跨平台/跨工具识别。


67
投票

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

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


28
投票

我个人使用.cc扩展实现文件,.hh用于头文件,.inl用于内联/模板。

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

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

---编辑

如上所述,这是“从我所看到的”,它可能是错的。只是我所使用的所有Windows项目都使用了.cpp,而且很多开源项目(主要是unix-like)使用.cc

使用.cc编写样式的示例:


17
投票

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


12
投票

另一种选择是.cxx,其中x应该是一个旋转45°的加号。

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


11
投票

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


10
投票

我个人从未在任何项目中见过.cc,但从技术上讲,编译器并不关心。

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

© www.soinside.com 2019 - 2024. All rights reserved.