.c vs .cc vs .cpp vs .hpp vs .h vs .cxx

< p > 可能的重复: < br / > *.h或*.hpp用于类定义 < br / > 正确的c++代码文件扩展名?.cc vs .cpp < / p >

我曾经认为它是这样的:

  • .h文件是C和c++的头文件,通常只包含声明。
  • .c文件是C源代码。
  • .cpp文件是c++源代码(也可以是C源代码)。

然后出现了.hpp.cc.cxx这样的文件,我完全懵了……它们之间有什么区别?什么时候用“new”;的吗?

236751 次浏览

这真的无关紧要 如果你将.c提供给c++编译器,它将被编译为cpp, .cc/。CXX只是一些编译器使用的.cpp的替代品

.hpp是一个区分头文件的尝试,其中有显著的c和c++的差异。一种常见的用法是.hpp具有必要的cpp包装器或命名空间,然后包括.h,以便将c库公开给c和c++。

我用".hpp"作为c++头文件,用".h"作为C语言头文件。 “.hpp”提醒我该文件包含用于 对于C语言无效的c++语言,例如

这些扩展并不是新的,而是旧的。: -)

在c++刚刚出现的时候,有些人希望源文件的扩展名是.c++,但这在大多数文件系统上行不通。所以他们尝试了一些类似的东西,比如。cxx,或者。cpp。

其他人则考虑语言名称,并将。c“递增”到。cc,甚至在某些情况下是。c。没那么流行。

有些人认为,如果源是.cpp,则头文件应该是.hpp以匹配。适度的成功。

一般来说,. C和.h文件用于C或C兼容代码,其他都是c++。

许多人喜欢对c++文件使用一致的配对:.cpp和.hpp, .cxx和.hxx, .cc和.hh,等等。我个人更喜欢。cpp和。hpp。

谈到。hpp扩展名,我发现它很有用,当人们看到这个头文件时,应该知道这个头文件包含c++而不是C,就像使用名称空间或模板等,所以他们不会试图将它提供给C编译器! 我还喜欢将不仅包含声明还包含实现的头文件命名为.hpp文件。像头文件,包括模板类。虽然这只是我的观点,当然它不应该是正确的!:) < / p >

从历史上看,c++使用的第一个扩展名是.c.h,就像C一样。这导致了实际问题,尤其是.c,它不允许构建系统轻松区分c++和C文件。

c++是在Unix上开发的,Unix有区分大小写的文件系统。因此,有些人使用.C作为c++文件。其他使用.c++.cc.cxx.C.c++存在在其他文件系统上不可用的问题,它们的使用很快就会下降。DOS和Windows c++编译器倾向于使用.cpp,其中一些编译器很难配置,如果不是不可能的话。可移植性的考虑使得这种选择最为普遍,甚至在ms windows之外也是如此。

头文件使用了相应的.H.h++.hh.hxx.hpp。但与主文件不同的是,.h直到今天仍然是c++的一个流行选择,即使它的缺点是不允许知道头文件是否可以包含在C上下文中。标准头文件现在根本没有扩展名。

此外,有些使用.ii.ixx.ipp.inl作为提供内联定义的头文件,使用.txx.tpp.tpl作为模板定义。它们要么包含在提供定义的头文件中,要么手动包含在需要它们的上下文中。

编译器和工具通常不关心使用了什么扩展,但是使用与c++相关联的扩展可以避免跟踪如何配置它们以正确识别所使用的语言。

2017编辑:Visual Studio的实验模块支持将.ixx识别为模块接口的默认扩展,clang++正在识别.c++m.cppm.cxxm,目的相同。