代码之家  ›  专栏  ›  技术社区  ›  vodkhang

使用头文件的好处和缺点是什么?[关闭]

  •  9
  • vodkhang  · 技术社区  · 14 年前

    我在编程语言方面有一些经验,如Java、C语言、斯卡拉以及一些较低级别的编程语言,如C、C++、Obj- C.等。

    我的观察是,低级语言尝试分离头文件和实现文件,而其他高级编程语言从未将其分离出来。这些语言使用一些标识符(如public、private、protected)来尝试执行头文件的作业。C++还具有标识符和头文件。

    我看到了使用头文件的一个好处(在一些书中,如code complete),他们谈到使用头文件,人们永远无法查看我们的实现文件,它有助于封装。

    缺点是它为我创建了太多的文件。有时候,它看起来很冗长。

    这只是我的想法,我不知道是否还有其他的好处和缺点,人们曾经看到和使用头文件。

    这个问题可能与编程没有直接关系,但我认为如果我能更好地理解接口编程,设计软件。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Norman Ramsey    14 年前

    我不确定你到底在问什么问题,所以我会尝试重新措辞:

    将公共信息放在单独的(头文件或接口文件)文件中有什么好处,而不是在信息出现的地方简单地将其标记为公共或私有?

    拥有单独的接口或头文件的主要好处是 它减少了读者的认知负担 . 如果你试图理解一个大系统,你可以解决一个 实施 一次只需读取 接口 它依赖的其他实现/类/模块。这是一个主要的好处,而且不需要单独的接口文件(如Java)或甚至不能使用的语言。 表达 单独文件中的接口(如haskell)通常提供诸如doxygen或haddock之类的工具,以便从实现中生成供人们阅读的单独接口。

    我非常喜欢标准ML、目标CAML和modula-2/3这样的语言,它们有一个单独的接口文件可供审查。在C语言中使用单独的头文件也很好,但没有那么好,因为一般来说,编译器无法独立地检查头文件。(C++头文件不太好,因为它们允许私有信息(如私有字段或内联方法的实现)泄漏到头文件中,从而使公共信息被稀释)。

    语言设计界的民间传说是,对于典型的静态类型语言,一个模块中只有大约10%的信息是公开的(用代码行来衡量)。通过将这些信息放在单独的头文件中,可以将读卡器的工作负载减少大约10倍。

        2
  •  9
  •   Aiden Bell    14 年前

    它们允许您分发库的API,以便编译器编译正确的代码。

    就像在C中一样,不包括整个实现,只包括 链接时在库中 .

    从这个意义上说,好处主要是针对编译器。因此,在say中安装二进制库 /lib 以及包含搜索路径中的标题。你是说,在 运行时 ,希望具有此调用约定的这些符号可用。

    当编译器/链接器/解释器不需要它们时,该语言的约定是最好的方法,因为这正是其他程序员希望找到的。预计会是传统的。

    C等语言包括 检查 从二进制blob获取信息的库,因此在许多这些语言中,您不需要头。工具,如 Cecil 对于C还允许您自己检查库(甚至修改库)。

    简而言之,有些语言消除了报头的好处,并允许检查库中的所有 编译时间 确保链接代码符合相同的接口/API规范所需的信息。

        3
  •  2
  •   Nick    14 年前

    它们使用一些标识符(如public、private、protected)来完成头文件的工作。

    我认为你错了:例如C++仍然具有公有私有和受保护,但是将实现从接口与头文件分开(虽然这不适用于函数模板)是很常见的。

    我认为在创建库时,将接口与实现分开是一个好主意,因为这样就不会向客户机公开任何内容的内部工作,因此客户机决不能故意生成依赖于实现的代码。如果你想分拆,这取决于你自己。我必须承认,对于我自己的代码(我为自己编写的小程序),我不经常使用它。

        4
  •  1
  •   BODY    13 年前

    在C的上下文中,头文件实现在我们的程序中带来了大量的可读性,这变得容易理解。如果这是系统地编写代码的方式,那么头文件会在我们的主函数文件(.c)和我们正在使用的其他(.c)文件之间带来抽象、标准化和松耦合。