C语言入门教程-创建一个函数库

电子常识

2651人已加入

描述

创建一个函数库

上述程序中的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;

return (unsigned int)(rand_seed / 65536) % 32768;
}

void bubble_sort(int m,int a[])
{int x,y,t; for (x=0; x < m-1; x++)
for (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变量没有在头文件中出现,所以对使用本库的程序来说是不可见的,也不能被修改。这就叫做信息隐藏。在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("%dn",a[i]);} 
bubble_sort(MAX,a); /* 打印排序后的数组 */ 
printf("--------------------n"); for (i=0; i < MAX; i++) 
printf("%dn",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可以在一定程度上简化函数库的使用。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
lzhiaohiua 2018-06-15
0 回复 举报
谢谢楼主的分享 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分