可能重复:
*.h or *.hpp for your class definitions
Correct C++ code file extension? .cc vs .cpp
我曾经认为过去是这样的:
.h文件是C和C++的头文件,通常只包含C源文件,code..cpp文件是C++源代码(也可以是C源代码)。然后像.hpp,.cc和.cxx这样的文件来了,我完全搞不懂.它们之间有什么区别?你什么时候用“新”的?
发布于 2011-03-02 18:36:52
历史上,用于C++的第一个扩展是.c和.h,与C完全一样。这导致了实际问题,特别是不允许构建系统容易区分C++和C文件的.c。
开发C++的Unix具有区分大小写的文件系统。因此,有些人使用.C来处理C++文件。其他使用.c++、.cc和.cxx。.C和.c++存在这样的问题:它们在其他文件系统中不可用,而且它们的使用也迅速下降。DOS和Windows C++编译器倾向于使用.cpp,它们中的一些使得选择(如果不是不可能的话)很难配置。可移植性使得这种选择成为最常见的选择,甚至在MS之外也是如此。
标头使用了相应的.H、.h++、.hh、.hxx和.hpp。但是与主文件不同的是,.h至今仍然是C++的热门选择,尽管它不允许知道头部是否可以包含在C上下文中。标准标头现在没有任何扩展。
此外,有些人正在使用.ii、.ixx、.ipp、.inl作为提供内联定义的标头,使用.txx、.tpp和.tpl作为模板定义。它们要么包含在提供定义的标头中,要么包括在需要它们的上下文中。
编译器和工具通常不关心使用什么扩展,但是使用它们与C++关联的扩展可以避免跟踪如何配置它们,从而正确识别所使用的语言。
2017编辑: Visual的试验性模块支持将.ixx识别为模块接口的默认扩展,clang++为了同样的目的识别.c++m、.cppm和.cxxm。
发布于 2011-03-02 18:15:57
这些扩展并不是新的,而是旧的。:-)
当C++刚出现时,有些人想为源文件设置一个.c++扩展名,但这在大多数文件系统中行不通。于是他们尝试了一些类似于此的东西,比如.cxx,或者.cpp。
其他人则考虑语言名称,并在某些情况下“递增”.c以获得.cc甚至.C。没那么受欢迎。
一些人认为,如果源是.cpp,则头应该是.hpp才能匹配。适度成功。
发布于 2011-03-02 18:09:04
这真的不重要。
如果将.c提供给c++编译器,它将编译为cpp,..c/..cxx只是一些编译器使用的.cpp的替代。
.hpp是一种区分头文件的尝试,在这些文件中存在显著的c和c++差异。一个常见的用法是.hpp具有必要的cpp包装器或命名空间,然后包含.h,以便向c和c++公开c库。
https://stackoverflow.com/questions/5171502
复制相似问题