哪个是正确使用 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 文件.
希望这对您有所帮助:)
我很想知道头文件的正确使用方法
下面是两种使用头文件的方法,我认为这两种方法都不错。
注意: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 文件.
希望这对您有所帮助:)