这一切都在标题;超级简单的我想,但它是如此难以寻找任何地方语法的东西。

这些都是我从 CS50.net 将两张库文件,和我不知道为什么他们有两个不同的扩展。

有帮助吗?

解决方案

.C:C文件(其中实际的行动是,在一般情况)

.H:头文件(将包含在一个预处理器#include指令)。包含的东西,通常认为你的代码的其他部分共用,像函数原型,#define'd东西,全局变量extern声明(哦,恐怖)等。

从技术上讲,你可以把一切都在一个文件中。整整C程序。线条万元。但是,我们人类往往会整理东西。所以你创建不同的C文件,每个文件包含特定功能。这是所有漂亮和干净。然后你突然意识到,声明你到一个给定的C文件还应该存在于另一个C文件。所以,你会复制它们。因此最好是提取声明,放入一个共同的文件,这是.H

例如,在cs50.h你发现了什么叫你的函数“向前声明”。 远期声明是一个快速的方法来告诉编译器的功能应该如何调用(例如:什么样的输入PARAMS),并返回结果是什么,因此,如果调用函数与错误数量的参数可以进行适当的检查(例如,它会抱怨)。

又如。假设你写一个包含执行正则表达式匹配函数.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代码(全!),这是在浪费时间和麻烦的根源。

其他提示

当然,没有什么表示的报头文件的扩展名应该为.h和C源文件的扩展名必须.c。这些是有用的约定。

E:\Temp> type my.interface
#ifndef MY_INTERFACE_INCLUDED
#define MYBUFFERSIZE 8
#define MY_INTERFACE_INCLUDED
#endif

E:\Temp> type my.source
#include <stdio.h>

#include "my.interface"

int main(void) {
    char x[MYBUFFERSIZE] = {0};
    x[0] = 'a';
    puts(x);
    return 0;
}

E:\Temp> gcc -x c my.source -o my.exe

E:\Temp> my
a

他们并不是真正的库文件。他们只是源文件。像斯特凡诺表示,在 .C 文件是实际使用/定义它所在·H 文件,头文件仅概述的实际源的C源文件。头文件通常列出所有的函数原型和结构将在实际的源文件中使用的。认为它像一个参考/附录。这是在观看了头文件明显,你会看到:)所以那么当你想使用写在这些源文件的东西,你#include头文件,其中包含编译器需要知道的信息。

在.C是源文件和.h是头文件

在.c文件是将被编译的源文件。 h文件用于一个程序的API暴露于该节目或其它节目的任一其它部分要创建的库。

例如,程序PizzaDelivery可具有与主节目1个.c文件,并与效用函数1个.c文件。现在,该计划的主要部分能够使用的实用功能,你需要公开的API,通过函数原型,为.h文件,这个.h文件中被列入由主.c文件。

.c : 'C' source code
.h : Header file

通常,.c文件包含的执行,并.h文件包含一个实现的“接口”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top