首页 > C语言自定义头文件

头文件,C语言自定义头文件

互联网 2021-04-20 14:19:43
0.建立工程

在建头文件之前,我们还是从建立一个C语言工程开始,所用工具:DEV C++

第一步:文件 → 新建 → 项目

图1

第二步:Basic →Empty Project

图2

第三步:选择路径(选择一个路径即可),保存之后就生成一个first.dev (工程文件)

图3

第四步:保存之后,回到程序编辑界面,可以看到 first工程有一个未命名的编辑页面.

图4

第五步:我们可以在这个页面写程序了,如下:

第六步:然后点击保存,选择路径(自动会选择:工程下的路径)

上面就是建立一个完整工程的步骤.

我们回归正题,要自定义头文件.

1.自定义头文件

① 头文件是什么?

头文件其实就是一个扩展名为 .h 的文件,可以用文本编辑器打开,包含C函数的声明与宏定义.

程序需要进行运算,就需要数据,而这些数据可以通过计算机的输入设备(如:键盘、鼠标等)进行输入. 如果我们想要得到运算的结果,在程序运行完后,对运行结果进行输出. C语言中,数据的输入与输出一般是用scanf函数printf函数实现的. 如下:

图5

Q1:printf和scanf都是函数,在C语言中,如果要使用它们,就要声明它们,怎么声明?

A1:比如:你用scanf函数输入数据和printf函数输出数据,那你的源程序就需要包含stdio.h的头文件,因为stdio.h这个头文件就有对这两个函数的声明.

怎么包含头文件,要用 #include 预处理指令,如下:#include //stdio.h 全称“standard input output.header”

同理:你要pow函数算多立方,那你的源程序就要包含math.h的头文件. math.h头文件就有对pow函数的声明.

#include

像stdio.h和math.h都是编译器自带的头文件.

Q2: 那我们自己能否写一个头文件呢?

A2: 当然可以

方法1:在.h头文件中就包含函数的实现,这种头文件实际上是把函数放在一起,便于管理而已. 这种情况下只有一个.h文件.

方法2:在 .h头文件中 只包含一些函数的声明,没有具体的实现. 函数的实现放在另外一个不包含main()的 .c源文件中,然后需要将源文件和头文件连接起来. 这种情况下包含.h文件和.c文件两种文件.

② 方法1的实现

✦ 新建 .h 头文件,如下(与main.c 同一路径):

图6

✦ 编写头文件 (sum.h)

图7

用Dev C++就可以对sum.h进行编写程序,如图7所示,编写了两个整数相加的函数

✦ 编写主程序(main.c)

感觉挺简单的吧,我们来运行main.c,查看结果,如下:

图9

③ 方法2的实现

✦ 建立一个sum.h

图10注:这次所创建的sum.h只包含函数的声明,不包含函数的实现.#ifndef x //先测试x是否被宏定义过#define x 程序段1blabla~//如果x没有被宏定义过,定义x,并编译程序段 1#endif 程序段2blabla~ //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1条件指示符#ifndef 的最主要目的是防止头文件的重复包含和编译.

✦ 建立一个sum.c

sum.h是声明函数,sum.c是实现函数图11

✦ 建立一个main.c

图12

运行结果如下:

图13

2.其它

通过上面自定义头文件,让我们对工程有一个更有清楚的认识.

上面所做的,前提是得建立一个工程,能否不建立工程,直接创建源文件呢?

图13

如图13所示,没有建立工程,直接建的源文件.

图14

如图14所示:运行报错:undefined reference to "add"

通过上面,我们可以清楚,新建工程(或项目),其实就是确定编译的文件,如果我们把main.c,sum.h, sum.c放在同一工程目录下,编译器编译时,会把它们一起进行编译,如图15,最后生成的可执行文件为first.exe,大小为157KB.

图15 first.exe

反之,如果我们没有建立工程,把相关文件放在同一文件目录下,编译器没有那么的"智能"了,如图14,就会报错,至于怎么解决这个问题,我们就要手动进行编译与链接,

怎么进行手动编译与链接,可看如下参考:

C语言编程俱乐部:【C语言】如何使用头文件 .h 编译 C 源码!so easy!

总结:复杂些的程序常常不只一个源文件,这样多个源文件要编译、链接在一起才能运行,当一个源文件修改后重新编译时,引用过它的其它文件也要重新编译,如果我们不建立工程,这些事情,需要我们自己手动编译与链接,这是比较琐碎的机械行为,又比较花时间,但是,建一个工程后,ide就能在工程级别替你做这些事情了,让我们更加专注于代码本身.

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。