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

时间:2009-10-09 17:23:18

标签: c++ filenames

我已将C ++代码保存为.cc.cpp文件。两者之间有区别吗?

Google style guide似乎建议.cc,但不提供任何解释。

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

19 个答案:

答案 0 :(得分:594)

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

答案 1 :(得分:249)

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

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

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

详细说明

答案 2 :(得分:170)

对于makefile和其他工具使用哪些工具提出了很好的建议,在决定使用哪种扩展时考虑非编译工具是一种很好的方法,可以帮助找到适合你的答案。

我只想添加以下内容以帮助我找到一些.cc vs .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以便于跨平台/跨工具识别。

答案 3 :(得分:67)

据我所知,

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

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

答案 4 :(得分:27)

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

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

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

---编辑

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

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

答案 5 :(得分:16)

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

答案 6 :(得分:11)

只需遵循项目/团队使用的惯例。

答案 7 :(得分:11)

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

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

答案 8 :(得分:9)

我个人从未在我参与的任何项目中看到过.cc,但在所有技术性方面,编译器都不会关心。

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

答案 9 :(得分:9)

有几个人说.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 ++。

答案 10 :(得分:8)

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

答案 11 :(得分:8)

与大多数样式惯例一样,只有两件事情很重要:

  1. 尽可能保持一致使用。
  2. 不要设计任何取决于所使用的特定选择的内容。
  3. 这些似乎是矛盾的,但它们各自都有其价值。

答案 12 :(得分:7)

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

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

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

答案 13 :(得分:7)

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

答案 14 :(得分:6)

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

答案 15 :(得分: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

我现在才知道这件事。

答案 16 :(得分:0)

我正在开始一个新的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 是阻力最小的途径。

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

就我个人而言,我没有使用cc扩展名,我试图减少扩展名的数量而不是增加扩展名,除非有明确的价值(我认为)。

对于它的价值,这就是我正在使用的

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

cpp-C ++代码

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

h-两个C / C ++的头文件。我同意可以做出另一种区分,但是正如我所写的,为了简化起见,我试图减少扩展的数量。至少从我从事过的C ++项目来看,纯C的h文件很少见,因此我不想添加其他扩展名。