为什么C/C++有不同于C#和Java等其他语言的头文件
Why does C/C++ have header files unlike other languages like C# and Java?
我对动机很感兴趣-在C/C++中,通过头文件将接口与接口分离的动机是什么?为什么其他语言的作者没有借用这个概念并在其他(较新的)语言中使用它?这是否意味着这个概念不好?
编辑:我不是在问为什么c/c++使用头文件-我是在问为什么这个概念没有保留在Java等较新的语言中。
在设计C语言时,计算机的资源非常少,将处理时间和内存使用量降至最低是很重要的。与使编译器在发出编译代码之前对源代码进行多次遍历或在内存中构造大型数据结构的设计相比,更倾向于使编译器能够在一次遍历中"动态"读取源文件并对其进行编译,同时资源使用量最小。头文件允许一次性编译:它们为声明并使用符号提供了一种方法,而其定义可能稍后出现在源代码中,甚至可能在不同的文件或外部库中。
C#和Java等较新语言的设计认为程序员的便利性比优化编译器的资源使用更重要。此外,许多现代C编译器已经使用多个过程,因为不可能在一个过程中应用许多代码优化;如今,为新语言使用单程设计几乎没有什么好处。
头文件还有其他好处:它们允许您将接口与实现分离,这样头文件就可以作为API文档,而无需公开实现的详细信息。
我不确定这是否是一个适合Stackoverflow的问题,但是:
当我在写一个类时,我很欣赏有一个单独的.h和.cpp文件的清晰性。这在几个方面对我有利:
1:当其他人必须使用我的类时,他们只需要读取.h文件-类的方法内部没有代码来混淆他们-这个函数的调用方式类似于所以,下面是解释它的作用的注释,你不需要知道其他的。
2:当我必须查看我的代码时,使用单独的.h和.cpp可以进行比较/对比。如果我在.cpp中有一个半生不熟的方法,而我最终不需要它,那么这两个文件之间就会不匹配。因此,我可以使用更清晰的.h文件,它更容易查看我是否在.cpp文件中做错了什么。
- Java 和其他语言在生成子序列时的输出差异
- 与其他语言相比的 Ruby 和指针
- 其他语言的Qt键盘输入
- 我需要知道什么才能开始用c++/其他语言编程合成器
- 动态C++与其他语言的比较 - 在不知道类型的情况下无法在对象上调用方法
- 用java编写源代码,并将其编译为其他语言的各种可执行文件?多重编译
- 如何使C枚举类型可用于其他语言
- 使用大多数Java代码制作可执行文件,但可能添加了其他语言
- 如何用其他语言编写带有绑定的Qt插件系统
- 库在C/C++和其他语言中重现Java原语hashCode逻辑
- WebAPI2 Async .是与所有其他语言兼容的
- 从 bash 拆分的流是否可以转置为其他语言
- 用PHP或任何其他语言上传巨大的文件
- 如何在Ruby和其他语言之间共享文本文件(或互斥/信号量)
- 如何通过C++(或建议其他语言)在网页上"do stuff"
- 在GO中使库可以从其他语言中使用
- 这在C++、PHP和其他语言中的使用
- 为什么C/C++有不同于C#和Java等其他语言的头文件
- C/ c++(其他语言?)条件提前返回良好的代码实践
- 如何制作一个古怪的数学计算器?(最好使用c++,但其他语言也可以)