哪个是正确使用 C 中的头文件?

which one is right use of header file in C?

我很想知道头文件的正确使用方法
下面是两种使用头文件的方法,我认为这两种方法都不错。

注意:Destroy.c 也使用 stdio.h、stdlib.h
1.

2。

请指教。谢谢

不要建立不必要的依赖!

无需将任何系统 header 包含到 destroy.h 中。如果 destroy.c 中的代码需要,请将它们包含在那里。

  • 使用header-guards.
  • 只在需要的地方包含需要的内容。
  • 包括system/libraryheaders 1st。不遵守此规则的情况非常罕见。

    更新为什么包含系统 header 1st:

    系统header声明了程序要使用的"frame-work"。所以程序应该 "know" 关于这个 "frame-work" before 声明它自己的东西,因为它可能依赖于系统提供的东西。

    系统大多从不依赖程序提供的内容。

    图书馆也一样,从程序的角度来看,这些只是对系统的补充。

以有助于记录该模块的方式在每个模块中提及 #include 行是一种很好的做法。这样,下一个处理您的代码的人就可以查看它并看到,例如,"aha, this module uses stdlib." 这是一种使您的依赖项对编译器和程序员都可见的方法。

因此,如果您在 Destroy.c 模块中使用 stdlib 的功能,请在 #include 行中提及它。如果你不这样做,就把它留在外面。

如果您的 main.c 程序使用 Destroy.c 模块中的功能,请在 main.c.

中包含 Destroy.h

当您决定是否将系统头文件的 #include 嵌套在您的一个头文件中时,情况也是如此(在我看来)。如果头文件本身中的东西利用了系统头文件中的东西,请包含它。

这个header-file模式:

#ifndef MODULE_H
#define MODULE_H
  /* lots of stuff */
#endif

目的是使在需要的地方提及每个头文件成为可能,而不必担心多次包含它。

另一个人建议按常规顺序显示您的 #include 行,首先是系统包含。这是个好主意。

所有这些只是惯例,而不是 hard-and-fast 规则。我提供的会议对我服务过的团队很有效。

编辑 通常 .c.h 文件是配对的。 .h 文件包含 使用 .c 文件中的函数所必需的声明。有时这只是一个函数声明,有时它还包括常量、结构和其他类似内容的声明。 (我在这里写的是 C 语言。C++ class 中的定义规则比 C 中的定义规则更清晰。)

您创建的头文件将使用系统头文件中的内容的情况很少见,但并非不可能。可能的情况:声明一个执行某种错误记录的宏。

简单地说,只要您需要调用 function/macro 而您的 c 文件正在使用它的 prototype/definition,您就应该只包含头文件。 因此,在您的情况下,如果您在 Destroy() 函数中使用任何 stdio/stdlib/struct 库预定义函数(如 printf-),请确保包含它们,如果你不是,那么你不应该包括它们,尽管你的编译器可能甚至不会警告你。

此外,如果这是您在 main() 函数中调用的唯一函数,那么您不应在 main.c 文件.

希望这对您有所帮助:)