C - 头文件

C - Header files

C 需要不同的头文件,如stdio.h、stdlib.h、fcntl.h、等等。,对于不同的函数和结构定义,这是为什么?在引擎盖下,这一切都归结为 libc 那么为什么不创建一个包含所有定义和原型的头文件呢?

这些文件由 C 标准库提供,可以更轻松地完成常见任务。至于为什么将声明和定义保存在单独的文件中,这是出于方便和可维护性的原因。同样的原因,例如,Linux 内核没有在单个 C 文件中定义,即使理论上它可以是。

C不需要这样的东西

如果您愿意,可以手动将任何 header 文件的内容复制到每个源文件中,而无需 header 文件。然而,这很容易出错——如果其中一个源文件发生变化,通常需要更新所有源文件,这很容易出现拼写错误。(如果你复制标准 header 的内容对于所有编译单元,如果使用不同的 compiler/library 构建,您的代码也可能会失败,因为 headers 的内容因实现而异。

包含 header 文件只是一种技术,它允许 header 文件的内容被(有效地)复制并粘贴到包含它的每个源文件中 - 所有源文件都获得相同的内容(除非其他一些预处理器宏导致事情有条件地发生)。对于有助于便携性的标准 headers(特别是那些提供只能在不同系统上以不同方式实现的功能)。

单独的头文件的定义方式主要是由于历史兼容性。 C语言在标准化之前就已经在各种平台上使用了。

单独的头文件背后的基本原理可能是在 C 语言中模仿模块化的一种方式。单独的头文件定义了模块提供的功能。这与其他语言提供功能的方式没有太大区别。

C 也有极简主义哲学,因此要求每个翻译单元编译所有可用函数的原型声明,而不管它们是否将被使用,这似乎有些过分。