C++的头文件后缀名一般用.h还是.hpp较为合适?

关注者
125
被浏览
192,737

13 个回答

更新:实名反对说 hpp 就是声明 + 实现的(实际上这应该说声明 + 定义)

编译器处理一个翻译单元的时候根本不管在哪个文件声明哪个文件定义,你只要遵循 one definition 原则就可以了。

我们如果说 hpp 是 C++ header,我们就不能限制在 hpp 中声明和定义一定在一起,我们完全可以声明在一个hpp,定义在 cpp

你想怎么组织文件就怎么组织文件,你可以 hpp 里声明然后再 include 一个 tpp/ipp 作为定义,对于模板代码来说这样就做到了 声明/实现 分离

Something.hpp

#pragma once
namespace space {
template <typename Type>
class Something {
public:
    void some_interface();
} // namespace space
#include "Something.ipp"

Something.ipp

#pragma once
namespace space {
template <typename Type>
void Something<Type>::some_interface() {
    // the implementation
} // namespace space

from Why use a "tpp" file when implementing templated functions and classes defined in a header?

=================原回答分割线===================


题主不要被误导了,请一定记住 C 不是 C++,不要把两者的头文件混合在一起

.hpp/.hh/.H/.hxx/.h++ 是 C++ 的头文件, .h 不是

当然一般来说,如果你的项目没有混合使用 C 和 C++ 语言,那么你使用 .h 和 .cpp 是没有问题的。否则你需要一个 .hpp 来 wrapper C 代码,一般会这么写:

header.hpp:

#pragma once