2

可能重复:
C 中的头文件有什么意义?

我正在做一个unix项目。经过大量搜索,许多人建议使用头文件,因为它们用于编写需要在多个源文件之间共享的代码。

最好将定义集中在一个文件 - 头文件中。

现在我有两个疑问
1)使用头文件而不是简单的 .c 文件有什么意义。
这个答案我得到头文件没有编译为目标文件。然后会发生什么(实际上 gcc 是如何对待它们的)?有什么好处?我分享的答案想指出什么?

2)编写头文件的规则或约定是什么。我只知道这个:

头文件通常只包含数据类型、函数原型和 C 预处理器命令的定义。

我们可以只写这个,即这是一个规则还是约定?

谁能告诉我任何资源来学习如何编写头文件。

我只能找到这个 -编写更大的程序- 包含的内容不多。或用于编写更好和优化的头文件的任何其他技巧或风格。

4

2 回答 2

2

1) 头文件允许您在 .c 文件之间传递信息,例如定义或其他 .c 文件中存在的函数,这允许您将逻辑上属于一起的代码保存在一个地方;#include 指令将命名文件视为它是命名文件的一部分,这允许您节省大量冗余输入

2) 惯例是将#define's、enum's 和函数声明传递到.h 文件中,在.c 文件中带有实际的功能代码(除了偶尔的静态内联函数)

规则是:无论编译器吃什么而不死,都或多或少是允许的,只要它产生一个函数式程序。这些约定的存在或多或少是为了帮助您将项目保持在可理解、可维护的状态。

于 2012-04-12T11:59:49.037 回答
0

我认为最好的办法是理解为什么头文件有用 (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 文件中,并且是一个集中的位置,您知道如果您更改函数需要修改该位置。

于 2012-04-12T12:11:25.600 回答