做一个图书馆
自从兰特和bubble_sort功能在前面的程序是有用的,你可能会想要你写在其他程序中重用它们。你可以把它们放进一个实用程序库,让他们更容易重用。
每个图书馆由两部分组成:头文件和实际的代码文件。头文件,通常用。h后缀,包含有关图书馆的信息程序需要18luck手机登录知道使用它。在一般情况下,头文件包含常量和类型以及函数的原型可以在图书馆。输入以下头文件并将其保存到一个文件命名util.h。
广告
/ *跑龙套。h * / extern int rand ();外面的空白bubble_sort (int, int []);
这两条线是函数原型。“外来的”这个词在C代表函数将在稍后联系在一起。如果您使用的是一个老派的编译器,删除参数的参数列表bubble_sort。
输入以下代码到一个文件中命名util.c。
/ *跑龙套。c * / # include“实效。h " int rand_seed = 10;/ *从k和r -产生0到32767之间的一个随机数。* / int rand () {rand_seed = rand_seed * 1103515245 + 12345;返回(unsigned int) (rand_seed / 65536) % 32768;}无效bubble_sort (int, int []) {int x, y, t;为(x = 0;x < m - 1;x + +) (y = 0;y < m-x-1; y++) if (a[y] > a[y+1]) { t=a[y]; a[y]=a[y+1]; a[y+1]=t; } }
请注意,文件包括自己的头文件(util.h),它使用引号而不是符号<和>仅用于系统库。正如您可以看到的,这看起来就像正常的C代码。请注意,该变量rand_seed,因为它不是在头文件,不能看到或修改程序使用这个库。这就是所谓的信息隐藏。18luck手机登录添加这个词静态前面的int执行完全隐藏。
输入以下主程序在文件命名c。
# include < stdio。h > # include“实效。10 h”# define马克斯int (MAX);void main () {int i t, x, y;/ *填充数组* / (i = 0;我< MAX;我+ +){[我]= rand ();printf (" % d \ n”,[我]);}bubble_sort (MAX);/ *打印排序数组* / printf (" - - - - - - - - - - - - - - - - - - - - - - \ n”); for (i=0; i < MAX; i++) printf("%d\n",a[i]); }
这段代码包括实用程序库。使用图书馆的主要好处是,主程序中的代码要短得多。
编译和运行库
编译库,在命令行输入以下(假设您使用UNIX) (gcc换成cc如果您的系统使用cc):
gcc - c - g util.c
的- c使编译器生成一个对象库文件。对象文件包含图书馆的机器代码。它不能被执行,直到它与一个程序文件,其中包含一个主要功能。机器代码驻留在一个单独的文件命名util.o。
要编译主程序,输入以下:
gcc - c - g c
这一行创建了一个文件命名main.o包含主程序的机器代码。创建最终的可执行文件,包含了整个程序的机器代码,连接两个对象文件通过输入下面的:
gcc - o主要主要。o util.o
这个链接main.o和util.o形成一个可执行的命名主要。运行它,类型主要。
makefile简化与图书馆合作一点。你会发现makefile在下一页。