我的类定义一直使用*.h文件,但在阅读了一些boost库代码后,我意识到它们都使用*.hpp。我一直很讨厌这个文件扩展名,我想主要是因为我不习惯它。
使用*.hpp而不是*.h的优点和缺点是什么?
我的类定义一直使用*.h文件,但在阅读了一些boost库代码后,我意识到它们都使用*.hpp。我一直很讨厌这个文件扩展名,我想主要是因为我不习惯它。
使用*.hpp而不是*.h的优点和缺点是什么?
当前回答
正如这里许多人已经提到的,我也更喜欢使用.hpp来处理使用模板类/函数的纯头文件库。我更喜欢使用.h作为头文件,附带.cpp源文件或共享或静态库。
我开发的大多数库都是基于模板的,因此只需要头文件,但在编写应用程序时,我倾向于将声明与实现分开,最终使用.h和.cpp文件
其他回答
源文件的扩展名可能对您的构建系统有意义,例如,您可能在makefile中有一个用于.cpp或. C文件的规则,或者您的编译器(例如Microsoft cl.exe)可能根据扩展名将文件编译为C或c++。
因为您必须向#include指令提供整个文件名,所以头文件扩展名是不相关的。如果您愿意,您可以在另一个源文件中包含.c文件,因为它只是一个文本包含。你的编译器可能有一个选项来转储预处理输出,这将使这一点明确(微软:/P预处理到文件,/E预处理到stdout, /EP省略#line指令,/C保留注释)
你可以选择对那些只与c++环境相关的文件使用.hpp,也就是说,它们使用的特性不能用C编译。
我使用。h,因为这是微软使用的,也是他们的代码生成器创建的。没必要违背常理。
我一直认为.hpp头文件是.h和.cpp文件的混合…还包含实现细节的标头。
通常,当我看到(并使用).hpp作为扩展名时,没有相应的.cpp文件。正如其他人所说,这不是一个严格的规则,只是我倾向于使用.hpp文件。
使用哪个扩展名并不重要。两种都可以。
我用*.h表示C,用*.hpp表示c++。
你可以随意命名你的include。
只需要在#include中指定全名。
我建议你使用C语言时使用.h,使用c++时使用.hpp。
它最终只是一种惯例。