3

为什么我们在 C 中包含头文件

我不明白在 C 中添加头文件有什么需要。我的意思是如果我不使用它们会发生什么

4

7 回答 7

17

It was originally a compilation problem with cross recursion :

void foo() {
  //bar? what is this function???
  bar();
}

void bar() {
  //I know foo() because it appears before. 
  foo();
}
  • foo can call bar only if it is defined before.
  • bar can only call foo if it is defined before

So which one do we define first???

To solve this problem came the prototypes.

//prototype of foo()
void foo();
//prototype of bar()
void bar();

void foo() {
  // I can call bar() because I know it exists
  bar();
}

void bar() {
  // I can call foo() because I know it exists
  foo();
}

Then the prototypes were gathered in a .h files.

It then became a good practice as it separates the interface from the implementation.

于 2013-09-30T08:37:45.410 回答
8

大型项目被编译成目标文件“.o”,然后在一个二进制文件中链接在一起。

这意味着在编译时,如果您访问位于另一个目标文件中的函数,编译器不知道它们,因此通过包含 .h 文件,您声明将在链接时可用的函数,因此编译器相信他们将在那里,而不会引发有关缺少功能的错误。

于 2013-09-30T08:33:45.573 回答
3

维基百科:

头文件是允许程序员将程序源代码的某些元素分成可重用文件的文件。头文件通常包含类、子例程、变量和其他标识符的前向声明。希望在多个源文件中声明标准化标识符的程序员可以将此类标识符放在单个头文件中,然后其他代码可以在需要头文件内容时包含该文件。这是为了使标头中的接口与实现分开。

于 2013-09-30T08:34:16.880 回答
3

没有实际需要使用它们。它们使您免于在您拥有的每个源文件中包含您正在使用的所有函数的定义。头文件无非就是在你使用的地方插入它们的内容#include。如果你愿意,你可以自己写所有这些。

于 2013-09-30T08:32:33.657 回答
0

来自其他头文件的声明在该文件中不可见,除非您包含头文件或提供相同的声明(完全重复)。

使用头文件是在该源文件中使用另一个程序的最简单(阅读:只有理智)的方法。通过包含,您可以指示编译器读取文件的内容,以便您可以轻松地使用该文件中的任何内容。

于 2013-09-30T08:33:40.390 回答
0

它对层次结构设计很有用。你可以c不写headers,然后你会看到每个源文件都变得太大而无法理解或使用,当你需要相同的代码时,你需要复制或重写它。有了'headers',我们可以编写系统的不同部分分别放入标题中,然后我们可以测试或重用它。

于 2013-09-30T09:57:58.060 回答
0

计算机本身无法找出任何东西。这正是我们告诉它的[程序]。我们包含的文件也在做同样的事情,它给出了关于我们在程序中使用的命令的基本概念,以使其工作。这信息存在于包含的文件中。

于 2013-09-30T08:35:47.747 回答