2011-03-27 96 views
5

在诸如C或C++之类的语言中使用头文件与Java之类的语言相比有什么优缺点?我认为类应该是从外部设计的,所以很高兴有头文件,而不需要通过实现细节。但是,再次,每个函数声明都在两个文件中重复。如果今天发明C和C++,他们会使用头文件吗?这种机制是过时的还是必要的?头文件的优点/缺点

+1

java?我错过了什么? – CromTheDestroyer 2011-03-27 22:03:39

+0

μ(http://en.wikipedia.org/wiki/Mu_%28negative%29)...但头文件允许我懒惰,不写所有的声明(和类型,枚举和定义和宏)遍布“纯”C源文件 – pmg 2011-03-27 22:04:42

+1

Java类(至少在我的学校)通常在一个文件中定义。 C,C++和目标C类通常在两个文件中定义。 – jeffythedragonslayer 2011-03-27 22:05:04

回答

12

通过埃里克利珀,把谁得很好,从相关blog post措施:

我会问相当于 问题为什么C++需要头 文件?头文件看起来像一个巨大的潜在失败点 ;所有的 时间我编辑C++代码,并更改方法的签名 ;如果我忘记 更新头文件,那么代码 不会编译,并且经常给出一些 隐晦的错误消息。希望这个 巨大的成本实际上购买你 的东西。

它购买编译器作家一件事, 和用户一件事。

它所购买的用户,你可以 编译每个单独的“CPP”文件 成“目标文件”文件独立, 前提是你拥有所有必要的 头。为了生成 在给定cpp文件中的物体所需的所有信息 可以从头集收集到 。这意味着 构建系统可以重新编译 只是那些已更改的cpp文件, 前提是没有更改标头。

它购买编译器的作者是 每个文件都可以编译为 “一次通过”。因为每个类型和 方法声明之前 其第一使用处理,编译器可以 简单地从文件, 拉在所有包含的头顶部开始, 从上往下进行,随地吐痰 出来obj文件,因为它去,从来没有 不得不回去并重访 已经看到的东西。

这与诸如C#(关于哪个博客文章)和Java这样的语言形成鲜明对比。

+2

这个有趣的事情是它购买用户。它允许用户通过文件重新编译文件。但是这只是因为C和C++的编译/链接时间过长才需要。所以在我看来,这完全是关于编译器,而穷人开发者是二等公民。 – 2011-03-27 22:24:49

+2

Java是C#的一个近亲。 Java是C#的父亲。 – irreputable 2011-03-27 22:27:46

+0

@irreputable:这让我发笑。这也是我分享的意见。 – Jon 2011-03-27 22:31:05

-2

简而言之,在C或C++头文件中允许不同的文件共享公共定义或声明。

在Java中,一切都是一个对象,所以除了对象之外没有任何共享任何概念。每个对象是一个文件;如果你想访问该对象,则导入该文件。

1

分离接口和实现仍然是一个好主意。但它不一定是物理分离。在Java中你可以看到来自javadoc的接口。 Java IDE通常可以显示API结构,并且它们可以折叠块。没有令人信服的理由需要物理分离。 C是几十年前发明的,所以我们不需要挑选它。