很久困扰着我的问题在今天终于得到了答案,我心中的喜悦全部释放,这要感谢万方数据中的一篇文献《在Turbo C中建立自己的函数库》(作者:杨新锋, 普庆宾。中图分类号:TP312 文献标识码:A)由于我如果抄袭原作者的文章可能涉及侵权,因此我将我自己在这些数周中的困扰着我的这个过程以及我是如何解决此外题的过程写下来,其目的仍然是同大家分享知识。
从刚刚看《C语言的科学与艺术》一书,书中的许多源代码和课后练习都使用到了作者编写的库。如genlib.h, simpio.h和我正在使用的gragh.h绘图库。今天我学会了如何创建自己的库后的第一件事就是,将我原来的graph.h文件加入到了库中。曾经多少次我在网络上寻求帮助,找到了无数的文章,但是每一次都是以失败告终,而今天我成功了。
首先说一说为什么要使用库?
C语言中我们很少有人会提到接口这个概念,然而其实.h文件就是接口(我们常说的库文件)。接口是使用接口程序员与编写接口程序员之间的一堵墙,这堵墙屏蔽了函数的细节,仅仅将函数原型呈现给接口使用者。这就为使用者提供了便利,大大节省了时间,提高了效率。一个大的软件中会常常用到许多接口,我们在编写小的程序中也在使用者接口。例如经典的helloworld程序,就是用到了stdio.h接口中的printf方法,通过这个接口的方法,helloworld才会呈现在我们的显示器上。
有两种方法可以创建自己的.h文件:
第一种方法是,将整个函数写入.h文件中。如果开始写程序,将那个.h文件直接通过#include"XXX.h"引种到文件即可。这种方法的优点是比较方便,但不适合用于较大的程序中。
第二种方法是,编写一个软件包。何谓软件包?软件包=包含自定义函数的.h文件和此文件中所有自定义函数的.c文件。我们今天将的就是这种方法。这种方法比较适合应用于较大的程序。
通过例子学习,我给大家举一个简单的例子,目的是通过此例使大家掌握创建软件包的方法。
什么例子?例子的内容是编写一个软件包,功能是输出两个数中的最大值。
步骤:
1.编写demo.h和demo.c文件。在demo.h文件中定义了函数原型(函数返回值类型,函数名,参数类型,参数名称,参数个数);在demo.c文件中实现了所有demo.h文件中的函数。
demo.h文件代码
1 /*
2 *Return the max value of the two integer values
3 */
4 int maxValue(int n1, int n2);
demo.c文件代码
1 #include<stdio.h>
2 /*
3 *Return the max value of the two integer values
4 */
5 int maxValue(int n1, int n2)
6 {
7 if( n1 > n2 )
8 return n1;
9 else
10 return n2;
11 }
2.编译demo.c文件,如图:
注意:编译成demo.obj文件就可以了,不需要生成exe文件。
3.查看编译模式,一般来说编译器的编译模式都是small,可以通过图上的方式查看:
本文之针对Small模式进行讲述,其他模式类似,就不再一一讲述。
4.将obj文件加入到库中(samll模式)
在运行输入cmd,打开MS-DOS。通过Dos打开c:\turboc2\tlib。输入tlib cs.lib+demo.obj。
说明:由于在安装turboC时大家的路径不会相同,编译后的demo.obj文件的路径也不会相同;因此,应该根据不同的路径输入对应的路径。
注意:只有当出现TLIB Version 2.0……Borland International才表示成功。
5.将demo.h文件拷贝到Include文件夹下。(demo.obj和demo.c可以删除了,我们只保留demo.h)
通过以上步骤后,我们就可以使用demo.h了。
编写一个文件example.c:
1 /*
2 The Art and Science of C.
3 Practice: Issue 4, question 1
4 */
5 #include<stdio.h>
6 #include<demo.h>
7
8 void main()
9 {
10 printf("%d\n",maxValue(11,32));
11 }
可以看到程序输出了32
我在网上很难搜到这样的文章,因此希望这篇文章能够帮助还在很原来的我一样在寻找答案的朋友们。今天感觉文字表达力弱了很多,如有不清楚的地方,欢迎朋友们指出。