头文件的优点/缺点

时间:2011-03-27 21:59:21

标签: java c++ c header

在像C或C ++这样的语言中使用头文件与Java之类的语言有什么优缺点?我认为类应该从外部设计,所以有头文件很好,而不必涉及实现细节。但是,然后,每个函数声明在两个文件中重复。如果今天发明了C和C ++,他们会使用头文件吗?这种机制是否过时或必要?

3 个答案:

答案 0 :(得分:13)

取自Eric Lippert的相关blog post,他说得非常好:

  

我会问同等的   问题为什么C ++需要标题   文件的?头文件似乎是一个巨大的   潜在的失败点;一切   时间我编辑C ++代码并更改   方法的签名;如果我忘了   更新头文件,然后更新代码   不编译,经常给出一些   神秘的错误信息。希望这个   很大的成本实际上是在买你   东西。

     

它为编译器编写器买了一件东西,   和用户一件事。

     

它为用户购买的是你可以   编译每个“cpp”文件   独立地进入“obj”文件,   只要你拥有所有的   必要的标题。所有信息   生成那些身体所必需的   在给定的cpp文件中可以收集   从标题集。这意味着   构建系统可以重新编译   只是那些改变了的cpp文件,   只要没有标题改变。

     

它购买编译器的是什么   每个文件都可以编译   “一通”。因为每种类型和   方法声明之前处理过   它的第一个用法,编译器可以   只需从文件顶部开始,   拉入所有包含的标题,然后   从上到下,随地吐痰   出来的obj文件,永远不会   不得不回去重访   它已经看到的东西。

这与C#(关于博客文章)和Java等语言形成了鲜明对比。这是一种非常近亲。

答案 1 :(得分:1)

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

答案 2 :(得分:-2)

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

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