头文件的优点/缺点

jef*_*yer 5 c c++ java header

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

Jon*_*Jon 13

取自Eric Lippert 的相关博客文章,他非常好地说:

我会问同样的问题为什么C++需要头文件?头文件似乎是一个巨大的潜在失败点; 我一直在编辑C++代码并改变方法的签名; 如果我忘记更新头文件,那么代码不会编译,并经常给出一些神秘的错误消息.希望这个巨大的成本实际上会给你带来一些东西.

它为编译器编写器买了一件东西,而用户只有一件事.

它为用户购买的是你可以独立地将每个"cpp"文件编译成一个"obj"文件,前提是你有所有必要的标题.生成给定cpp文件中的主体所需的所有信息都可以从头集合中收集.这意味着只要没有更改标头,构建系统就可以重新编译那些已更改的cpp文件.

它购买编译器编写器的原因是每个文件都可以在"一次通过"中编译.因为每个类型和方法声明在第一次使用之前都会被处理,所以编译器可以简单地从文件的顶部开始,拉入所有包含的头,然后从上到下继续,随后吐出obj文件,从来没有回过头来重温一下它已经看到过的东西.

这与诸如C#(关于博客文章)和Java之类的语言形成对比,后者是非常近亲.

  • 有趣的是它为用户购买的东西.它允许用户按文件重新编译文件.但实际上只需要C,尤其是C++的编译/链接时间.所以在我看来,这完全是关于编译器的,而可怜的开发人员是二等公民. (2认同)
  • Java是C#的近亲.Java是C#的父亲. (2认同)