31

我想知道为什么我们使用“.hh”作为 C++ 头文件的扩展名,而不是只使用“.h”。

头文件被预处理,预处理器甚至不关心头文件的扩展名。所以,即使我创建了一个扩展名为“.qwe”(test.qwe)的头文件。那么,为什么要使用“.hh”作为 C++ 头文件的扩展名。

有人说,我们使用“.cc”作为 C++ 文件的扩展名以区别于 C 文件(扩展名为“.c”),同样我们使用“.hh”作为 C++ 头文件的扩展名以区别于 C头文件(扩展名为“.h”)。我不认为这是一个正当的理由。

有谁知道以这种方式命名的原因?

4

6 回答 6

39

有人说,我们使用“.cc”作为 C++ 文件的扩展名以区别于 C 文件(扩展名为“.c”),同样我们使用“.hh”作为 C++ 头文件的扩展名以区别于 C头文件(扩展名为“.h”)

这正是原因。这只是区分 CPP 标头和 C 标头。

一些程序员和库,例如 Boost,.hpp用于 CPP 标头。我个人的选择是这样的:

  • 例子.c
  • 例子.cpp
  • 例子.h
  • 例子.h++

即使它们都属于一个巨大的项目,您仍然可以弄清楚哪个是哪个。无需描述。

于 2012-04-27T16:24:12.603 回答
8

您可以根据需要命名标题,它们甚至可以根本没有扩展名。

此常见问题解答提到了标头命名约定。

于 2012-04-27T16:23:42.433 回答
2

我认为这主要是一种社会惯例。

但是,最近的 GCC 编译器能够在解析该标头后将(单个)标头编译成类似foo.hh或基本上包含编译器(由启动的程序)的持久内存堆映像的东西。foo.hfoo.hh.gchfoo.h.gchcc1plusg++

请注意,C++11 标准库定义了头文件,例如<vector>,没有任何扩展名。

于 2012-04-27T16:26:29.993 回答
1

这不是出于任何特定原因,它只是一个(开发人员或项目特定的)约定。由于“文件扩展名”只是名称的一部分,它并不重要,因为源文件只是纯文本文件。此外,头文件只是复制粘贴到包含它们的文件中(通过#include,因此文件扩展名对它们来说意味着更少。

Borland 的图书馆的标题有.hpp扩展名。C++ 的标准库头文件根本没有扩展名。这只是惯例和个人品味的问题。

于 2012-04-27T16:24:03.277 回答
1

这完全是约定俗成的,没有什么特别的原因。通常人们试图在整个项目、团队甚至整个公司中保持一致。它可以帮助在您离开很久之后拿起您的代码的开发人员了解您 abc.hh 与文件 abc.cc 一起使用,而 abc.h 与 abc.c 一起使用。

于 2012-04-27T16:25:29.927 回答
1

一个原因,如果我正在创建一个包含围绕一堆 C++ 代码的 C API 的 dll,我需要区分客户端可能用来导入 C 函数的 C 头文件和我明确不使用的内部 C++ 头文件想让客户端导入。

在大多数语言/环境中,绑定到 C 函数非常简单,几乎没有开销。您不必考虑 C++ 中继承的所有复杂性。因此,如果我要使用这样的库,我一定要将我的 C++ 与我的 C 接口分开。

于 2012-04-27T16:26:19.000 回答