hpp和hxx有什么区别?

时间:2009-12-07 20:24:46

标签: c++

对于gcc他们应该是一样的吧?其中一个更受欢迎,我现在正在从头开始准备一个项目,我想从这两个中选择一个。

感谢

5 个答案:

答案 0 :(得分:19)

在C ++中,文件扩展名实际上并不重要。使用.h,.hpp,.hxx或没有文件扩展名都是按惯例。

标准库的头文件不使用文件扩展名。许多项目,包括Boost,都使用.hpp。许多项目都使用.h。只需选择一个并在项目中保持一致。

答案 1 :(得分:4)

编译器不区分这两个扩展,因此从技术上讲,使用哪个扩展并不重要。就个人而言,我将.hxx扩展名用于仅在项目内部使用的头文件,而.hpp用于那些应该用库/软件发布的头文件。

答案 2 :(得分:2)

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

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

这些常见函数体的示例,MyStringFunctionA,ANSI实现,在MyStringFunctionA.cpp中定义,而MyStringFunctionW,Unicode(宽字符)实现,在MyStringFunctionW.cpp中定义。 MyStringFunctionA.cpp和MyStringFunctionW.cpp包含原型,开始和结束括号以及标题,受UNICODE约束,适用于宽字符版本。函数体在函数定义块中的INI文件中定义,该文件是#included inline。

结合通用TCHAR映射,这种方法极大地简化了维护Unicode和ANSI版本,两者都保持有效使用。

这个命名约定适用于Visual Studio 6.但是,当我开始将我的代码库迁移到Visual Studio 2013时,我发现了一个令人讨厌的变化,最初令人困惑。虽然编译得很干净,但是当我的一个INL文件在代码编辑器中打开时,我会在错误窗口中看到几十个Intellisense“错误”。我引用了“错误”一词,因为它们不是真正的错误;当INL文件关闭时,它们就会消失,并且iNL被拉入的C和CPP文件编译没有错误,链接并正确运行。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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