我认为最好的办法是理解为什么头文件有用 (2) 以及它们是如何工作的 (1)。然后,您可以自己决定要遵循或不遵循哪些约定。
1) “include”指令的作用是,指令所指向的文件完全包含在当前编译的文件中。这应该很简单。
2) 通常,将一个 C 项目拆分为多个 C 文件更容易管理。这可能是由于大小原因(考虑具有数千行代码的项目 - 你如何在这样的文件中滚动),也可能是因为管理原因(考虑多个人在项目上工作 - 更容易划分职责)。
在多 C 文件项目中,您将需要从其他文件调用函数。我们举个例子:
fileA.c
int function_a() {
uses somewhere function_b
}
fileB.c
int function_b() {
uses somewhere function_c
}
fileC.c
int function_c() {
uses somewhere function_a
}
为了调用任何函数,您首先需要声明它(或定义它)。需要明确的是:声明是指定返回类型和参数时,定义是同时指定代码时。在上面的示例中,您无法仅将一个 C 文件“包含”到另一个 C 文件中,以便在使用之前定义所有函数。因此,您必须在调用函数之前添加函数的“声明”。你在哪里可以添加这样的声明?如果您在 fileA.c 中添加 function_c 的声明,这将很难维护(认为您可以在数十个文件中使用这种情况,跟踪所有声明将非常困难)。
同样的事情也适用于类型。
解决这个问题的方法是为每个 C 文件创建一个“头”文件,在其中声明程序其他模块所需的所有函数(和类型)。这些文件可以以任何顺序包含在需要这些函数的所有其他 C 文件中,并且是一个集中的位置,您知道如果您更改函数需要修改该位置。