C中的头文件有什么意义?

时间:2010-02-02 14:20:48

标签: c header-files

  

可能重复:
  [C] Header per source file.
  In C++ why have header files and cpp files?
  C++ - What should go into an .h file?

C中存在头文件的唯一原因是开发人员可以快速查看可用的函数,以及它们可以采用哪些参数?或者它与编译器有关?

为什么没有其他语言使用此方法?它只是我,还是看起来有两套功能定义只会导致更多的维护和更多的错误空间?或者只知道每个C开发人员必须知道的头文件?

4 个答案:

答案 0 :(得分:23)

声明可用的函数和变量需要头文件。您可能无法访问所有的定义(= .c文件); C支持库中的二进制代码分发。

答案 1 :(得分:11)

编译器需要头文件中的信息才能知道哪些函数,结构等可用以及如何使用它们。

所有语言都需要这种信息,尽管它们以不同的方式检索信息。例如,Java编译器通过扫描类文件或java源代码来检索信息。

Java方式的缺点是编译器可能需要在其内存中保存更多信息才能执行此操作。今天这没什么大不了的,但是在七十年代,当C语言被创建时,根本不可能在内存中保留那么多信息。

答案 2 :(得分:8)

标题存在的主要原因是在多个源文件之间共享声明。

假设您在文件float *f(int a, int b)中定义了a.c函数,并在b.cd.c中重复使用。要允许编译器正确检查参数并返回值,您可以将函数原型放在头文件中,并将其包含在.c源文件中,或者在每个源文件中重复原型。

同样适用于typedef等。

虽然理论上可以在每个源文件中重复相同的声明,但正确管理它会成为一个真正的噩梦。

某些语言使用相同的方法。我记得TurboPascal单位并没有太大的不同。您可以将use ...放在开头,表示您将需要在其他位置定义的函数。我不记得是否也将它传递给Delphi。

答案 3 :(得分:2)

  1. 了解库中的内容。
  2. 将程序拆分为编译器的一口大小的块。同时编译一个兆字节的C文件将比大多数现代硬件提供更多的资源。
  3. 减少编译器负载。为什么在深度数据库引擎的屏幕显示程序中知道呢?让它只学习它现在需要的功能。
  4. 分开私人和公共数据。这种用法并不常见,但您可以在C中实现C ++使用私有字段:每个.c文件包含两个.h文件,一个包含私有内容的声明,另一个包含其他可能需要的文件。命名空间冲突的可能性更小,由于密化而更安全。
  5. 替代配置。 Makefile决定使用哪个标头,并且相同的代码可以在给定两个不同标头文件的情况下为两个不同的平台提供服务。
  6. 可能更多。