描述

创建一个函数库

上述程序中的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精彩内容

点击阅读全文

c语言标准函数库怎么建立教程,C语言入门教程-创建一个函数库相关推荐

  1. Kafka教程(一)Kafka入门教程

    Kafka教程(一)Kafka入门教程 1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件 ...

  2. SAP UI5 应用开发教程之三十二 - 如何创建一个自定义 SAP UI5 控件试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  3. Docker教程(一) Docker入门教程

    Docker教程(一) Docker入门教程 本文链接:https://blog.csdn.net/yuan_xw/article/details/51935278 Docker教程(一) Docke ...

  4. Redis教程(一) Redis入门教程

    Redis教程(一) Redis入门教程 1 Redis入门教程 Redis是一个 Key-Value存储系统.和 Memcached类似,它支持存储的 value类型相对更多,包括 string(字 ...

  5. Nginx教程(一) Nginx入门教程

    Nginx教程(一) Nginx入门教程 1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由 ...

  6. SDL2 简明教程(二):创建一个空的窗口

    系列文章目录 SDL2 简明教程(一):使用 Cmake 和 Conan 构建 SDL2 编程环境 SDL2 简明教程(二):创建一个空的窗口 文章目录 系列文章目录 创建空窗口 总结 创建空窗口 在 ...

  7. 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )

    文章目录 I . NDK platforms 目录下的 函数库 II . Ubuntu 配置 NDK 交叉编译环境 III . 同时指定编译的头文件和库文件 IV . 指定编译的头文件 V . 指定编 ...

  8. WMI 使用教程_.NET 入门教程

    WMI 使用教程_.NET 入门教程 先介绍一下WMI 相关知识:  什么是WMI 呢? Windows 管理规范 (Windows Management Instrumentation ),它的主要 ...

  9. AFNnetworking快速教程,官方入门教程译

    AFNnetworking快速教程,官方入门教程译 分类: IOS2013-12-15 20:29 12489人阅读 评论(5) 收藏 举报 afnetworkingjsonios入门教程快速教程 A ...

最新文章

  1. 未来十年有望改变世界的五大发现
  2. 不同网段使用同一台网络打印机
  3. 32 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义差异码
  4. ssma迁移助手_如何使用SQL Server迁移助手(SSMA)和SSIS将MySQL表迁移到SQL Server
  5. android触摸滑动监听,Android 滑动监听的实例详解
  6. java成员变量除了方法传递_JAVA类与对象(四)----成员变量与局部变量 、成员方法、构造方法...
  7. ubuntu之安装sublime text
  8. 剑指 offer set 8 树的子结构
  9. MySQL下载步骤详解
  10. 车联网 北斗GPS 部标平台 JT/T808
  11. 【常规版本】SIS-OAS 1.53.0(2019/5/23发布)版本 --需求评审 ---模板
  12. 在TCGA中查找mutation突变
  13. 百度智能云文字转语音
  14. yum 安装没有公钥_CentOS7.7中使用yum安装进,提示尚未安装任何 GPG 公钥的解决办法...
  15. C++基础入门丨1. 初识C++像极了C语言
  16. 为什么戏说php,戏说PHP——1. 1切的开始
  17. 付利赚团队分享互联网发展过程那些疯狂的时代
  18. Hibernate: Duplicate entry for key错误排查
  19. c语言程序设计数学电压表,单片机课程设计-数字电压表的设计.doc
  20. USSD(Unstructured Supplementary Service Data)即非结构化补充数据业务,是一种新型基于GSM网络的交互式数据业务

热门文章

  1. 现在开始做一些什么事情可以在五年以后大为收益? Answer by FindProz.com Co-founder
  2. python为什么那么多人用_为什么那么多人在学Python?
  3. 软件制胜之道精彩观点聚合
  4. 铁路12306网站App服务时间延长 退票业务可24小时全天候办理
  5. 挂了三次科目二的我,竟被一台智能车征服 | 威马W6停车挑战
  6. 首发骁龙898!小米12系列屏幕方案曝光:双曲面屏+全新封装工艺
  7. iPhone 12全球销量超过1亿部 研究机构称在4月份就已超过
  8. 疑似iPhone 13 mini原型机曝光:后置相机模组排布方式变化
  9. 富士康海外工厂遭黑客攻击 被勒索1804枚比特币
  10. 斗鱼递交私有化退市文件 与虎牙合并暂无完成时间表