答案 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)
与大多数样式惯例一样,只有两件事情很重要:
这些似乎是矛盾的,但它们各自都有其价值。
答案 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.c
和foo.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
文件很少见,因此我不想添加其他扩展名。