为什么我需要在同名的.c文件中包含.h头文件?

pun*_*ess 8 c

所以我在Head First C中跟随我们,我们正在学习一起编译多个文件的章节.其中之一是encrypt.c.

#include "encrypt.h"


void encrypt(char *message)
{
  char c;
  while (*message) {
   *message = *message ^ 31;
   message++;
  }
}
Run Code Online (Sandbox Code Playgroud)

encrypt.h文件在结尾处以分号重复第一行,为什么我需要它?我明白为什么我需要头文件来修复在定义之前使用函数的问题,所以我可以理解#including它在一个使用的文件中encrypt.c,但为什么我需要它在里面encrypt.c?这只是"因为"原因之一吗?

Jon*_*Jon 17

如果内容encrypt.c全部显示,则不需要标题.但是包含它仍然是一个好主意,因为:

  1. 如果文件中的一个函数使用另一个函数,那么定义的顺序很重要,因为必须在调用者之前定义被调用者.它甚至可以有两个函数A和B,每个函数调用另一个函数,在这种情况下,如果没有至少一个前向声明,你就无法编译代码.包含带前向声明的标题可以解决这些问题.
  2. 像客户端代码一样使用头文件是让编译器指出前向声明中的签名与实际函数定义之间的差异的好方法.如果未被发现,这种问题可能会在运行时导致"有趣"的行为并导致大量的毛发拉动.


Luc*_*ore 6

你是对的,如果全部encrypt.h声明,你不需要将它包含在.c文件中.

你主要是为了保持一致性.


dca*_*ell 6

假设您将 encrypt.c 更改为void encrypt(char *message, int i) { }

如果您不包含 encrypt.h,您将不会注意到应用程序中的其他文件尚未更新以传递新参数。如果您同时更新 encrypt.h 和 encrypt.c,编译器可以为您进行检查。