【发布时间】:2010-02-11 19:24:48
【问题描述】:
我注意到 boost 库使用 (.hpp) 的头文件。
我很好奇,因为我看到的大多数源文件都使用普通的 .h 头文件。
是否有任何特殊情况需要使用.hpp 而不是.h?
谢谢
【问题讨论】:
我注意到 boost 库使用 (.hpp) 的头文件。
我很好奇,因为我看到的大多数源文件都使用普通的 .h 头文件。
是否有任何特殊情况需要使用.hpp 而不是.h?
谢谢
【问题讨论】:
只是约定俗成,没什么特别的。实际上,您可以在包含文件上使用任何扩展名。
【讨论】:
.hpp、.H 等是 C++ 头文件的松散约定,.tcc 是 C++ 模板实现的松散约定,.h 是 c 文件的非常强的约定。
Boost 使用 hpp 扩展名,QT 使用 .h 扩展名,STL 没有扩展名。我确信有些库使用 .H 但没有见过。
【讨论】:
确实,Otavio 是正确的。
在构建混合语言产品时,我使用 hpp / h 来区分两种语言。例如,类定义可能放在 .hpp 中(在 .cpp 中实现),而 .h 文件将只定义 C 支持的函数。要做到这一点,了解语言之间的区别很重要——为此我通过 gcc 传递 *.c,通过 g++ 传递 *.cpp。
【讨论】:
#include "filename" 预处理器指令的目的是将#include 行替换为filename 的内容。
所以事实上文件的任何名称都可以,但是因为它恰好是包含文件的约定是“.h”或“.hpp”,一个优点是在您选择的编辑器中突出显示语法(在我的例子中是vim)。
【讨论】:
我听说 UNIX 和 Linux 程序员使用 .hh 和 .cc 而不是 .cpp 和 .h 也很常见。我个人喜欢将我的头文件命名为 .hh,因为它有助于 emacs 区分 C 和 C++ 语法高亮。我也使用 .cc 扩展名,因为它与 .hh 一起看起来不错,而且它比 .cpp 短。我通常在 Linux 环境中进行编码。
【讨论】:
您只是告诉编译器在编译期间将给定文件包含在您的代码中。所以文件的扩展名无关紧要。但最好是文本文件。
【讨论】: