我的类定义一直使用*.h文件,但在阅读了一些boost库代码后,我意识到它们都使用*.hpp。我一直很讨厌这个文件扩展名,我想主要是因为我不习惯它。
使用*.hpp而不是*.h的优点和缺点是什么?
我的类定义一直使用*.h文件,但在阅读了一些boost库代码后,我意识到它们都使用*.hpp。我一直很讨厌这个文件扩展名,我想主要是因为我不习惯它。
使用*.hpp而不是*.h的优点和缺点是什么?
当前回答
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。
其他回答
编辑[增加了Dan Nissenbaum的建议]:
根据约定,当原型在头文件中定义时,使用.hpp文件。对于模板,头文件中的这种定义很有用,因为编译器只在模板实例化时为每种类型生成代码。因此,如果它们没有在头文件中定义,它们的定义将不会在链接时从其他编译单元解析。如果你的项目只使用c++,并且大量使用模板,这个约定将会很有用。
某些遵循此约定的模板库提供带有.hpp扩展名的头文件,以表明它们没有相应的.cpp文件。
另一个习惯是用.h表示C头文件,用.hpp表示c++头文件;boost库就是一个很好的例子。
引用自Boost FAQ, 文件扩展名向人类传递文件的“类型” 还有计算机程序。'.h'扩展名用于C头文件 文件,因此传达了关于c++头文件的错误信息 文件。不使用扩展不能传达任何信息,还会迫使检查 确定文件内容的类型。明确使用“。hpp” 将其标识为c++头文件,并且在实际应用中工作良好。 (Rainer Deyke)
在我90年代早期的一份工作中,我们分别使用.cc和.hh作为源文件和头文件。在所有的选择中,我仍然更喜欢它,可能是因为它最容易打字。
幸运的是,这很简单。
如果您使用c++,您应该使用.hpp扩展名,并且您应该使用.h表示C或混合使用C和c++。
正如这里许多人已经提到的,我也更喜欢使用.hpp来处理使用模板类/函数的纯头文件库。我更喜欢使用.h作为头文件,附带.cpp源文件或共享或静态库。
我开发的大多数库都是基于模板的,因此只需要头文件,但在编写应用程序时,我倾向于将声明与实现分开,最终使用.h和.cpp文件
我使用。h,因为这是微软使用的,也是他们的代码生成器创建的。没必要违背常理。