这全都在标题中;我认为超级简单,但是很难在任何地方搜索句法事物。

这是我从中复制的两个库文件CS50网,我想知道为什么他们有两个不同的扩展。

答案

.c:c文件(实际上是真正的动作,通常)

.h:标头文件(将与预处理器一起包含#include指示)。包含通常被认为与代码其他部分共享的内容,例如函数原型,#定义内容,全局变量的外部声明(哦,恐怖)等。

从技术上讲,您可以将所有内容都放在一个文件中。整个C程序。百万线。但是我们人类倾向于组织事物。因此,您可以创建不同的C文件,每个文件包含特定功能。一切都很好干净。然后突然你意识到declaration您可以进入给定的C文件中,也应该存在于另一个C文件中。因此,您会复制它们。因此,最好的是提取声明并将其放入公共文件中,即.h

例如,在CS50.H中,您可以找到您功能的"正向声明"。向前声明是一种告诉编译器应如何调用函数(例如输入参数)及其返回的函数的快速方法会抱怨)。

另一个例子。假设您编写一个.c文件,该文件包含执行正则表达式匹配的函数。您希望您的功能接受正则表达式,匹配的字符串以及一个告诉比较是否必须不敏感的参数。

因此,在.c中,您将放置

bool matches(string regexp, string s, int flags) { the code }

现在,假设您要传递以下标志:

0:如果搜索是案例敏感的

1:如果搜索是不敏感的

并且您想让自己对新标志保持开放,因此您没有输入布尔值。

#define MATCH_CASE_SENSITIVE 0
#define MATCH_CASE_INSENSITIVE 1

此信息进入了.H,因为如果任何程序都想使用这些标签,除非包含信息,否则它无法了解它们。当然,您可以将它们放入.C中,但是您必须包括.c代码(整个!),这是浪费时间和麻烦的根源。

来自: stackoverflow.com