使用.h作为C++文件的头文件是否不正确?

3
将c++文件命名为.h作为头文件是否错误?
我在很多地方看到这种命名方式,特别是在“C样式”的代码中。我注意到Emacs总是选择C高亮样式用于.h头文件,但用于hpp或hh则使用c ++。
将你的头文件标记为.h是真的“错误”吗,还是只是让我感到烦恼的事情?
编辑:
如果我有项目文件被标记为“hpp和cpp”,那么这个问题会让我感到烦恼,因为我可以使用“grep something *pp”等命令,否则我必须输入“.h cpp”。
5个回答

13

没有任何问题。这是Microsoft Visual C++的默认设置。

只需遵循您喜欢的标准,并坚持使用它即可。


而且需要注意的是,大多数标准库根本不使用扩展名。 - Richard
1
标准库是一个特殊情况。不要开始写没有扩展名的标头文件。 - jalf
2
标准库头文件根本不需要是“文件”,因此它们在这里并不是一个好的例子。编译器可以自由地按照其所见的方式来实现它们。 - Brian Neal
我可能早就知道这全都是比尔的错,唉! - Chris Huang-Leaver

5

把你的C++头文件命名为.h并不是错误的。没有规定你的代码必须使用哪种扩展名。对于非头文件,MSVC使用.cpp,在Linux上使用.cc。没有全球标准,.h肯定是非常常用的。

但我认为将头文件命名为.hpp(我也见过.hh)比仅使用.h更加一致和信息化。


3

您可以自由使用 .h, .H, .hpp, .hxx, .hh 或其他扩展名。就像您可以在 C 源文件中使用 .c,在 C++ 源文件中使用 .C, .cpp, .cc, 或 .cxx 一样。这些扩展名主要是一种约定。


2
就像其他文件一样——C用.c,C++用.cpp——C用.h,C++用.hpp。这将满足大多数编译器/编辑器的需求。不这样做并不是真正的错误,但它可以用来暗示你实际使用的语言。
如果你想停止这种行为而不重命名文件,你应该查看Emacs配置并尝试更改源代码检测。

2

由于Emacs没有轻松的方法来确定.h文件是C还是C++,因此选择将.h文件用于C,将.hpp文件用于C++并不荒谬。

请注意,所有boost头文件都以.hpp为后缀。


Vim 没有这个问题,这很奇怪,不是吗? - anon
为 Vim 球迷加一分! - Judge Maygarden
2
嘿,最近我决定编写一些绑定到F9的elisp代码,以便在处理.h头文件时在c-mode和c++-mode之间进行切换: (defun switch-c-or-c++-mode () "如果当前是c-mode,则切换到c++-mode,反之亦然。" (interactive) (cond ((eq major-mode 'c-mode) (c++-mode)) ((eq major-mode 'c++-mode) (c-mode)))) - Paul Stephenson
我想,真正的问题是为什么你要让事情变得更加不清晰。 - Chris Huang-Leaver
1
@anon, @Judge: 其实,Vim也有这个问题。Vim默认假设是C++。试一下:打开一个以.h为扩展名的文件,然后输入:setl ft?。它会告诉你文件类型被设置为C++ (cpp)。 - icktoofay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接