【问题标题】:What's the difference between C header files (.h) and C++ header files (.hpp)?C 头文件 (.h) 和 C++ 头文件 (.hpp) 有什么区别?
【发布时间】:2010-02-11 19:24:48
【问题描述】:

我注意到 boost 库使用 (.hpp) 的头文件。
我很好奇,因为我看到的大多数源文件都使用普通的 .h 头文件。
是否有任何特殊情况需要使用.hpp 而不是.h

谢谢

【问题讨论】:

标签: c++ c


【解决方案1】:

只是约定俗成,没什么特别的。实际上,您可以在包含文件上使用任何扩展名。

【讨论】:

    【解决方案2】:

    .hpp、.H 等是 C++ 头文件的松散约定,.tcc 是 C++ 模板实现的松散约定,.h 是 c 文件的非常强的约定。

    Boost 使用 hpp 扩展名,QT 使用 .h 扩展名,STL 没有扩展名。我确信有些库使用 .H 但没有见过。

    【讨论】:

    • 我认为 Qt 根本没有使用任何扩展。
    • QT 3 主要使用 .h 扩展名,但 Qt 4 似乎正在迁移到没有扩展名,因为大多数标头也有 .h 对应项。
    【解决方案3】:

    确实,Otavio 是正确的。

    在构建混合语言产品时,我使用 hpp / h 来区分两种语言。例如,类定义可能放在 .hpp 中(在 .cpp 中实现),而 .h 文件将只定义 C 支持的函数。要做到这一点,了解语言之间的区别很重要——为此我通过 gcc 传递 *.c,通过 g++ 传递 *.cpp。

    【讨论】:

      【解决方案4】:

      #include "filename" 预处理器指令的目的是将#include 行替换为filename 的内容。
      所以事实上文件的任何名称都可以,但是因为它恰好是包含文件的约定是“.h”或“.hpp”,一个优点是在您选择的编辑器中突出显示语法(在我的例子中是vim)。

      【讨论】:

        【解决方案5】:

        我听说 UNIX 和 Linux 程序员使用 .hh 和 .cc 而不是 .cpp 和 .h 也很常见。我个人喜欢将我的头文件命名为 .hh,因为它有助于 emacs 区分 C 和 C++ 语法高亮。我也使用 .cc 扩展名,因为它与 .hh 一起看起来不错,而且它比 .cpp 短。我通常在 Linux 环境中进行编码。

        【讨论】:

          【解决方案6】:

          您只是告诉编译器在编译期间将给定文件包含在您的代码中。所以文件的扩展名无关紧要。但最好是文本文件。

          【讨论】:

            猜你喜欢
            • 2011-03-11
            • 1970-01-01
            • 1970-01-01
            • 2017-10-08
            • 2020-08-19
            • 1970-01-01
            • 2010-10-29
            • 2010-10-26
            • 1970-01-01
            相关资源
            最近更新 更多