“hpp”和“hxx”的区别是什么?(提示:这是一个关于IT技术的问题)

13

对于GCC来说,它们应该是相同的,对吗?其中哪一个更受欢迎,我现在正在从零开始准备一个项目,我想在这两个中选择一个。

谢谢


请见:https://dev59.com/oXVC5IYBdhLWcg3w51dv - Josh Lee
5个回答

25

在 C++ 中,文件扩展名实际上并不重要。.h、.hpp、.hxx 或没有文件扩展名的使用都是按照约定来的。

标准库使用没有文件扩展名的头文件。许多项目(包括 Boost)使用 .hpp。许多项目使用 .h。只需选择其中之一,并在您的项目中保持一致性即可。


6
我遇到的一个问题是,对于C++头文件的.h扩展名,一些编辑器会误认为它们是C语言,并且一旦出现“命名空间”或“类”等内容,就会出现很多丑陋的语法高亮问题。 - Fred Larson
例如,查看我的问题:https://dev59.com/H0XRa4cB1Zd3GeqPs5Sl - Fred Larson

4
编译器并不区分这两个扩展名,所以从技术上讲,你使用哪一个都无所谓。个人而言,我使用.hxx扩展名来命名仅在项目内部使用的头文件,而对于需要与库/软件一起发布的头文件,则使用.hpp扩展名。

1

鉴于我最近的发现,我建议我们重新开启这个讨论。在过去的9年中,我为我的C和C++项目中的源文件使用了以下命名约定。

  • C = 包含一个或多个相关入口点的直接C源代码
  • CPP = 包含一个或多个相关入口点的C++源代码
  • H = 声明函数、宏、结构、typedef等
  • INL = 内联(函数体),它们是两个或更多函数的主定义文件(C或CPP文件)的主体,被#include合并到其中

这些常用函数体的一个例子是MyStringFunctionA,即ANSI实现,它在MyStringFunctionA.cpp中定义,而Unicode(宽字符)实现的MyStringFunctionW则在MyStringFunctionW.cpp中定义。 MyStringFunctionA.cpp和MyStringFunctionW.cpp包含原型、打开和关闭括号以及标头,受Unicode支持的是宽字符版本。函数体在INI文件中定义,该文件在函数定义块内联#include。

结合通用TCHAR映射,此方法极大地简化了维护Unicode和ANSI版本的工作,这两个版本都仍在积极使用中。

这种命名规范在Visual Studio 6中效果很好。然而,当我开始将代码库迁移到Visual Studio 2013时,我发现一个令人烦恼的变化,最初让我感到困惑。虽然一切编译干净,但当我的INL文件在代码编辑器中打开时,我会在错误窗口中看到数十个Intellisense“错误”列出来。我用引号引用“错误”一词,因为它们不是真正的错误;当INL文件关闭时,它们就消失了,并且将iNL合并到其中的C和CPP文件编译没有错误,链接并正确运行。

0

头文件扩展名通常不会有影响,但我知道在某些情况下,.cpp 文件的扩展名可能会有所不同。根据您的编译器,前端可能会选择将源文件编译为 C 或 C++。

这可能会有所不同,特别是如果您将编译与链接阶段结合使用,因为它可能会导致链接不同的库(例如 g++ vs gcc),因此您可以在 makefile 中控制结果。


-1

头文件是用C++编程语言编写的源代码头文件,可以包括数据类型、常量、变量和其他定义,用于声明和存储可重用的代码组件。 HXX文件可以使用#include指令插入到C++程序中。例如,#include myHeader.hxx指示C++编译器将"myHeader.hxx"包含到当前程序文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接