我不太了解具有报头的点;这似乎违背了DRY原则!被(可)包含在首标中的所有信息在执行。

有帮助吗?

解决方案

它简化了编译过程。当你想单独编译单元,你需要一些东西来描述将要连接到的部分,而无需导入所有其他文件的全部。

它还允许代码隐藏。一个可以分发报头以允许他人使用的功能,而不必分配的执行情况。

最后,可以鼓励接口的从实施的分离。

他们不是解决这些问题的唯一途径,但在30年前,他们是一个很好的一个。我们可能不会使用头文件为今天的语言,但他们并没有在2009年发明的。

其他提示

许多现代语言如Java,Eiffel和C#的设计师显然同意你的看法 - 这些语言来提取元数据有关从实施的模块。然而,本身标题的概念不排除 - 这显然是一个编译器提取.h文件,而编译.c,例如,就像编译器这些语言含蓄地做一个简单的任务。典型的电流C编译器不这样做的其实不是一种语言设计问题 - 这是一个实现问题;显然有由用户对这样的特征没有需求,所以没有编译器厂商困扰实现它。

作为一种语言的设计选择,有独立的.h文件(人类可读和可编辑的文本格式)为您提供了两全其美的:你可以开始基于一个模块实现,不存在单独编译客户端代码,如果你愿意,通过手写的.h文件;或者(通过荒谬假定其提供一编译器实现;-)可以从实现作为编译它的副作用自动获得.h文件。

如果C,C ++,&C,保持蓬勃发展(显然他们还在做精今天;-),和像你这样的需求不是手工编写头的增加,最终编译器的编写者必须提供“头生成”选项,和“两全其美”不会留理论 - !)

这有助于想想是可用的时候,说C,写计算机的能力一点。主存储器在kilowords测量,并不见得很多人。圆盘大,但数量不多。 Serrious存储意味着卷到卷磁带,由专人安装,由脾气暴躁的运营商,谁真的想你走开,使他们能够发挥追捕wumpus。 A 1 MIPS机器是尖叫快。而所有这些限制,你必须的分享的它。可能带有得分的其他用户的

凡是减小的空间的时间汇编的复杂性是一个大赢。和头两者都做。

不要忘记的报头提供的文档。通常有在任何事情,你需要知道使用该模块。我为我的一部分不希望通过looong源代码进行扫描,以了解那里是我需要使用以及如何调用它...你会提取这些信息,无论如何,这有效地产生了 - 一个头文件。不再与现代的IDE当然,一个问题,但也有一些旧的C代码,我真的很喜欢有手工制作的头文件,其中包括有关使用情况和有关前和后置条件意见的工作。

保持源,报头和同步附加文档仍然是蠕虫的另一罐...

检查语言处理器的二进制输出文件的整个构思本来很难理解当C发明.h文件。有一个叫 JOVIAL 是不喜欢的东西它的系统,但它是具有异国情调和限制更多 - 或多或少专门为军事项目。 (我从来没有见过一个愉快的程序,我只听说这件事。)

因此,当C出来用于模块化通常的设计模式是“无任何检查”。有可能是符号.text区段只能链接与.text区段和到。数据。数据的限制,但仅此而已。也就是说,这一天通常编译器处理一个源文件在同一时间,然后链接器把它们放在一起没有错误检查以外丝毫的水平,如果你是幸运的,“我是一个函数符号”与“我一个数据符号”

所以实际上编译器来了解你打电话的东西的想法是有些新的。

即使在今天,如果你犯了一个完全虚假的头,没有人发现你以最 AOT编译器。像CLR语言和Java聪明的事情实际上做编码的事情在类文件。

所以,是的,从长远来看,我们可能不会有头文件。

没有你没有在Java中头 - 但你确实有接口和I每一个严肃的Java大师建议您定义用于其他项目/系统作为一个接口和一个实现任何

让我们看看一个Java接口定义包含呼叫签名,类型定义和contants。

MOST C头文件包含呼叫签名,类型定义和常数。

因此,对于所有的目的之实践C / C ++头文件只是接口定义,因此应被认为是好事。现在我知道它可以定义在头文件中无数其他的东西,以及(MARCROs,常量等等,等等),但C的整个精彩世界的,只是一部分: -

int function target () {
    // Default for shoot
    return FOOT;
}

有关详细阅读

一个头文件中通常有向前的类,子例程,变量和其它标识符声明。谁希望在多于一个源文件中声明规范标识符程序员可以将这样的标识符在一个头文件,然后该其他代码可包括每当需要的报头的内容。

在C标准库和C ++标准库传统上声明其标准函数中的头文件。

如果你想给别人的声明使用你的库没有给他们实现什么?

作为另一个答案指出的 - 当初之所以标题是使解析/用非常简单和有限的工具编译的平台上更容易。这是一个巨大的进步有一个机器2张软盘,所以你可以有一个编译器和你对其他代码 - 做事情更容易

当你在头文件和源文件划分代码你划分声明和定义。当你在头文件中,您可以看到你有什么,如果你的魔杖看到实现细节你到源文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top