电子常识
创建一个函数库
上述程序中的rand和bubble_sort函数很实用,很可能在您写其他程序时也能派上用场。为了能更方便地重复使用,您可以为它们创建一个实用工具函数库。
所有的函数库都包括两部分:头文件和源文件。头文件的标准扩展名是.h,它包含函数库的一些信息,使用这个库的程序需要知道这些信息。一般来说,头文件包括常数,类型声明以及该函数库所提供函数的原型声明。请将下面的头文件代码录入,以文件名util.h保存。
/* util.h */ extern int rand(); extern void bubble_sort(int, int []);
这两行是函数原型声明。C语言中用“extern”指明从外部链接的函数。使用旧式编译器时须将bubble_sort的参数列表清空。
然后录入下面的代码,以文件名util.c保存。
/* util.c */ #include "util.h" int rand_seed=10; /* 摘自 K&R
- 产生一个0至32767之间的随机数。*/ int rand() { rand_seed = rand_seed * 1103515245 +12345;
注意,本文件包含了自己的头文件(util.h)而且用的是引号而不是< >,因为尖括号只用于系统库。如您所见,这里的代码和普通C代码没什么区别。请注意,因为rand_seed变量没有在头文件中出现,所以对使用本库的程序来说是不可见的,也不能被修改。这就叫做信息隐藏。在int前面加上static关键字会强制信息被完全隐藏。
请录入下面的主函数,以文件名main.c保存。
#include#include "util.h" #define MAX 10 int a[MAX]; void main() { int i,t,x,y; /* 填充数组元素 */ for (i=0; i < MAX; i++) {a[i]=rand(); printf("%d n",a[i]);} bubble_sort(MAX,a); /* 打印排序后的数组 */ printf("--------------------n"); for (i=0; i < MAX; i++) printf("%d n",a[i]); }
这个程序包含了该实用工具函数库。使用函数库的主要好处是主程序的代码被大大精简了。
函数库的编译和运行
要编译函数库,请在命令行键入如下命令(假设您使用的是UNIX。若您的系统用的是cc则用cc替换gcc):
gcc -c -g util.c
-c选项使编译器为函数库生成一个的目标文件,它包含了函数库的二进制代码,独立存在于名为util.o的目标文件中。目标文件只有在和一个包含主函数的程序文件链接后才能执行。
要编译主程序,请键入:
gcc -c -g main.c
此命令将生成一个文件名为main.o的目标文件,它包含了主程序的二进制代码。要创建包含整个程序机器代码的可执行文件,请键入下面的命令将两个目标文件链接:
gcc -o main main.o util.o
这条命令将main.o和util.o进行链接并生成可执行程序main。键入main后即可运行。
用makefile可以在一定程度上简化函数库的使用。
全部0条评论
快来发表一下你的评论吧 !