首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.c vs .cc vs .cpp vs .hpp vs .h vs .cxx

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

Stack Overflow用户
提问于 2011-03-02 18:04:59
回答 6查看 236.5K关注 0票数 296

可能重复:

*.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这样的文件来了,我完全搞不懂.它们之间有什么区别?你什么时候用“新”的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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

票数 356
EN

Stack Overflow用户

发布于 2011-03-02 18:15:57

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

当C++刚出现时,有些人想为源文件设置一个.c++扩展名,但这在大多数文件系统中行不通。于是他们尝试了一些类似于此的东西,比如.cxx,或者.cpp。

其他人则考虑语言名称,并在某些情况下“递增”.c以获得.cc甚至.C。没那么受欢迎。

一些人认为,如果源是.cpp,则头应该是.hpp才能匹配。适度成功。

票数 68
EN

Stack Overflow用户

发布于 2011-03-02 18:09:04

这真的不重要。

如果将.c提供给c++编译器,它将编译为cpp,..c/..cxx只是一些编译器使用的.cpp的替代。

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

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5171502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档