此问题已在此处有答案:
12年前就关门了。
社区在3天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
可能重复:
*.h or *.hpp for your class definitions
What is the difference between .cc and .cpp file suffix?
我曾经认为它曾经是:
.h
文件是C和C++的头文件,通常只包含声明。.c
文件是C源代码。.cpp
文件是C++源代码(也可以是C源代码)。
然后像.hpp
,.cc
和.cxx
这样的文件沿着出现,我完全搞糊涂了.这两者有什么区别?你什么时候用“新”的?
6条答案
按热度按时间des4xlb01#
从历史上看,C的第一个扩展名是
.c
和.h
,与C语言完全一样。这导致了实际问题,特别是.c
,它不允许构建系统轻松区分C和C文件。Unix是C的开发平台,它有区分大小写的文件系统。所以有些人使用
.C
来处理C文件。其他使用.c++
,.cc
和.cxx
。.C
和.c++
的问题是它们在其他文件系统上不可用,并且它们的使用很快就下降了。DOS和Windows C编译器倾向于使用.cpp
,其中一些编译器使得选择.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
用于相同的目的。hgtggwj02#
这些扩展并不是新的,它们是旧的。:-)
当C是新的,有些人希望有一个.c扩展的源文件,但这并不适用于大多数文件系统。所以他们尝试了类似的东西,比如.cxx或.cpp。
其他人则考虑了语言名称,并在某些情况下“递增”.c以获得.cc甚至.C。没那么流行
有些人认为,如果源代码是.cpp,那么头文件应该是.hpp才能匹配。中等成功。
wpcxdonn3#
这真的不重要
如果你将.c提供给c编译器,它将编译为cpp,.cc/.cxx只是一些编译器使用的.cpp的替代品。
.hpp是一种尝试,以区分头文件,其中有显着的c和c的差异。一种常见的用法是.hpp具有必要的cpp Package 器或命名空间,然后包括.h,以便将c库公开给c和c++。
6ojccjat4#
我使用“.hpp”作为C头文件,使用“.h”作为C语言头文件。“.hpp”提醒我,该文件包含 C 的语句,这些语句对C语言无效,例如“class”声明。
flmtquvp5#
谈到.hpp扩展名,我发现它很有用,当人们应该知道这个头文件包含 C++ 而不是 C,就像使用命名空间或模板等,当他们看到文件的时候,所以他们不会试图把它喂给 C 编译器!我也喜欢把头文件命名为.hpp文件,它不仅包含声明,还包含实现。比如包含模板类的头文件。虽然这只是我的意见,当然它不应该是正确的!:)
5jdjgkvh6#
通常,.c和.h文件用于C或C兼容代码,其他文件都是C++。
许多人更喜欢对C++文件使用一致的配对:.cpp与.hpp、.cxx与.hxx、.cc与.hh等。我个人比较喜欢.cpp和. hpp。