为什么C/C++有不同于C#和Java等其他语言的头文件

Why does C/C++ have header files unlike other languages like C# and Java?

本文关键字:其他 语言 文件 Java C++ 不同于 为什么      更新时间:2023-10-16

我对动机很感兴趣-在C/C++中,通过头文件将接口与接口分离的动机是什么?为什么其他语言的作者没有借用这个概念并在其他(较新的)语言中使用它?这是否意味着这个概念不好?

编辑:我不是在问为什么c/c++使用头文件-我是在问为什么这个概念没有保留在Java等较新的语言中。

在设计C语言时,计算机的资源非常少,将处理时间和内存使用量降至最低是很重要的。与使编译器在发出编译代码之前对源代码进行多次遍历或在内存中构造大型数据结构的设计相比,更倾向于使编译器能够在一次遍历中"动态"读取源文件并对其进行编译,同时资源使用量最小。头文件允许一次性编译:它们为声明并使用符号提供了一种方法,而其定义可能稍后出现在源代码中,甚至可能在不同的文件或外部库中。

C#和Java等较新语言的设计认为程序员的便利性比优化编译器的资源使用更重要。此外,许多现代C编译器已经使用多个过程,因为不可能在一个过程中应用许多代码优化;如今,为新语言使用单程设计几乎没有什么好处。

头文件还有其他好处:它们允许您将接口与实现分离,这样头文件就可以作为API文档,而无需公开实现的详细信息。

我不确定这是否是一个适合Stackoverflow的问题,但是:

当我在写一个类时,我很欣赏有一个单独的.h和.cpp文件的清晰性。这在几个方面对我有利:

1:当其他人必须使用我的类时,他们只需要读取.h文件-类的方法内部没有代码来混淆他们-这个函数的调用方式类似于所以,下面是解释它的作用的注释,你不需要知道其他的。

2:当我必须查看我的代码时,使用单独的.h和.cpp可以进行比较/对比。如果我在.cpp中有一个半生不熟的方法,而我最终不需要它,那么这两个文件之间就会不匹配。因此,我可以使用更清晰的.h文件,它更容易查看我是否在.cpp文件中做错了什么。