可能的重复项:
[C] 每个源文件的标题。
在 C++ 中为什么有头文件和 cpp 文件?
C++ - .h 文件应该包含什么?
C 中存在头文件的唯一原因是开发人员可以快速查看可用的函数以及它们可以采用的参数吗?还是与编译器有关?
为什么没有其他语言使用这种方法?是我一个人,还是看起来有 2 组函数定义只会导致更多的维护和更多的错误空间?还是知道头文件只是每个 C 开发人员都必须知道的事情?
可能的重复项:
[C] 每个源文件的标题。
在 C++ 中为什么有头文件和 cpp 文件?
C++ - .h 文件应该包含什么?
C 中存在头文件的唯一原因是开发人员可以快速查看可用的函数以及它们可以采用的参数吗?还是与编译器有关?
为什么没有其他语言使用这种方法?是我一个人,还是看起来有 2 组函数定义只会导致更多的维护和更多的错误空间?还是知道头文件只是每个 C 开发人员都必须知道的事情?
需要头文件来声明可用的函数和变量。您可能根本无法访问定义(= .c 文件);C 支持在库中仅二进制分发代码。
编译器需要头文件中的信息来了解哪些函数、结构等可用以及如何使用它们。
所有语言都需要这种信息,尽管它们以不同的方式检索信息。例如,Java 编译器通过扫描类文件或 Java 源代码来检索信息来实现这一点。
Java 方式的缺点是编译器可能需要在其内存中保存更多信息才能执行此操作。这在今天没什么大不了的,但是在 70 年代,当 C 语言被创建时,根本不可能在内存中保留这么多信息。
头文件存在的主要原因是在多个源文件之间共享声明。
假设您float *f(int a, int b)
在文件中定义了函数并在and中a.c
重用。为了允许编译器正确检查参数和返回值,您可以将函数原型放在头文件中并将其包含在源文件中,或者在每个源文件中重复原型。b.c
d.c
.c
typedef
等也一样。
虽然理论上您可以在每个源文件中重复相同的声明,但正确管理它将成为一场真正的噩梦。
某些语言使用相同的方法。我记得 TurboPascal 单位并没有太大的不同。您会use ...
在开头发出信号,表明您将需要在其他地方定义的函数。我不记得是否也将其传递给了 Delphi。
可能更多。