我的类定义一直使用*.h文件,但在阅读了一些boost库代码后,我意识到它们都使用*.hpp。我一直很讨厌这个文件扩展名,我想主要是因为我不习惯它。

使用*.hpp而不是*.h的优点和缺点是什么?


当前回答

幸运的是,这很简单。

如果您使用c++,您应该使用.hpp扩展名,并且您应该使用.h表示C或混合使用C和c++。

其他回答

编辑[增加了Dan Nissenbaum的建议]:

根据约定,当原型在头文件中定义时,使用.hpp文件。对于模板,头文件中的这种定义很有用,因为编译器只在模板实例化时为每种类型生成代码。因此,如果它们没有在头文件中定义,它们的定义将不会在链接时从其他编译单元解析。如果你的项目只使用c++,并且大量使用模板,这个约定将会很有用。

某些遵循此约定的模板库提供带有.hpp扩展名的头文件,以表明它们没有相应的.cpp文件。

另一个习惯是用.h表示C头文件,用.hpp表示c++头文件;boost库就是一个很好的例子。

引用自Boost FAQ, 文件扩展名向人类传递文件的“类型” 还有计算机程序。'.h'扩展名用于C头文件 文件,因此传达了关于c++头文件的错误信息 文件。不使用扩展不能传达任何信息,还会迫使检查 确定文件内容的类型。明确使用“。hpp” 将其标识为c++头文件,并且在实际应用中工作良好。 (Rainer Deyke)

Codegear c++ Builder使用.hpp作为从Delphi源文件自动生成的头文件,使用.h文件作为“自己的”头文件。

所以,当我写一个c++头文件时,我总是使用.h。

在Bjarne Stroustrup的《c++程序设计语言第三版》(第nº1本c++必读书籍)中,他使用了*.h。所以我认为最好的做法是使用*.h。

但是,*.hpp也很好!

Bjarne Stroustrup和Herb Sutter在他们的c++核心指南(https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#S-source)中对这个问题有一个声明,该指南也提到了标准扩展(c++ 11, c++ 14等)的最新变化。

SF.1: Use a .cpp suffix for code files and .h for interface files if your Y project doesn't already follow another convention Reason It's a longstanding convention. But consistency is more important, so if your project uses something else, follow that. Note This convention reflects a common use pattern: Headers are more often shared with C to compile as both C++ and C, which typically uses .h, and it's easier to name all headers .h instead of having different extensions for just those headers that are intended to be shared with C. On the other hand, implementation files are rarely shared with C and so should typically be distinguished from .c files, so it's normally best to name all C++ implementation files something else (such as .cpp). The specific names .h and .cpp are not required (just recommended as a default) and other names are in widespread use. Examples are .hh, .C, and .cxx. Use such names equivalently. In this document, we refer to .h and .cpp > as a shorthand for header and implementation files, even though the actual extension may be different. Your IDE (if you use one) may have strong opinions about suffices.

我不是这种惯例的大粉丝,因为如果你正在使用像boost这样的流行库,你的一致性已经被打破了,你最好使用.hpp。

你可以随意命名你的include。

只需要在#include中指定全名。

我建议你使用C语言时使用.h,使用c++时使用.hpp。

它最终只是一种惯例。