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

我曾经认为它是这样的:

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

然后出现了。hpp、。cc和。cxx这样的文件,我完全搞糊涂了……它们之间有什么区别?什么时候使用“新的”?


这真的不重要。 如果你将.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文件。像头文件,包括模板类。虽然这只是我的观点,当然它不应该是正确的!:)

从历史上看,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,目的相同。