c语言标准函数库怎么建立教程,C语言入门教程-创建一个函数库
描述
创建一个函数库
上述程序中的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语言入门教程-创建一个函数库相关推荐
- Kafka教程(一)Kafka入门教程
Kafka教程(一)Kafka入门教程 1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件 ...
- SAP UI5 应用开发教程之三十二 - 如何创建一个自定义 SAP UI5 控件试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- Docker教程(一) Docker入门教程
Docker教程(一) Docker入门教程 本文链接:https://blog.csdn.net/yuan_xw/article/details/51935278 Docker教程(一) Docke ...
- Redis教程(一) Redis入门教程
Redis教程(一) Redis入门教程 1 Redis入门教程 Redis是一个 Key-Value存储系统.和 Memcached类似,它支持存储的 value类型相对更多,包括 string(字 ...
- Nginx教程(一) Nginx入门教程
Nginx教程(一) Nginx入门教程 1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由 ...
- SDL2 简明教程(二):创建一个空的窗口
系列文章目录 SDL2 简明教程(一):使用 Cmake 和 Conan 构建 SDL2 编程环境 SDL2 简明教程(二):创建一个空的窗口 文章目录 系列文章目录 创建空窗口 总结 创建空窗口 在 ...
- 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )
文章目录 I . NDK platforms 目录下的 函数库 II . Ubuntu 配置 NDK 交叉编译环境 III . 同时指定编译的头文件和库文件 IV . 指定编译的头文件 V . 指定编 ...
- WMI 使用教程_.NET 入门教程
WMI 使用教程_.NET 入门教程 先介绍一下WMI 相关知识: 什么是WMI 呢? Windows 管理规范 (Windows Management Instrumentation ),它的主要 ...
- AFNnetworking快速教程,官方入门教程译
AFNnetworking快速教程,官方入门教程译 分类: IOS2013-12-15 20:29 12489人阅读 评论(5) 收藏 举报 afnetworkingjsonios入门教程快速教程 A ...
最新文章
- 未来十年有望改变世界的五大发现
- 不同网段使用同一台网络打印机
- 32 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义差异码
- ssma迁移助手_如何使用SQL Server迁移助手(SSMA)和SSIS将MySQL表迁移到SQL Server
- android触摸滑动监听,Android 滑动监听的实例详解
- java成员变量除了方法传递_JAVA类与对象(四)----成员变量与局部变量 、成员方法、构造方法...
- ubuntu之安装sublime text
- 剑指 offer set 8 树的子结构
- MySQL下载步骤详解
- 车联网 北斗GPS 部标平台 JT/T808
- 【常规版本】SIS-OAS 1.53.0(2019/5/23发布)版本 --需求评审 ---模板
- 在TCGA中查找mutation突变
- 百度智能云文字转语音
- yum 安装没有公钥_CentOS7.7中使用yum安装进,提示尚未安装任何 GPG 公钥的解决办法...
- C++基础入门丨1. 初识C++像极了C语言
- 为什么戏说php,戏说PHP——1. 1切的开始
- 付利赚团队分享互联网发展过程那些疯狂的时代
- Hibernate: Duplicate entry for key错误排查
- c语言程序设计数学电压表,单片机课程设计-数字电压表的设计.doc
- USSD(Unstructured Supplementary Service Data)即非结构化补充数据业务,是一种新型基于GSM网络的交互式数据业务
热门文章
- 现在开始做一些什么事情可以在五年以后大为收益? Answer by FindProz.com Co-founder
- python为什么那么多人用_为什么那么多人在学Python?
- 软件制胜之道精彩观点聚合
- 铁路12306网站App服务时间延长 退票业务可24小时全天候办理
- 挂了三次科目二的我,竟被一台智能车征服 | 威马W6停车挑战
- 首发骁龙898!小米12系列屏幕方案曝光:双曲面屏+全新封装工艺
- iPhone 12全球销量超过1亿部 研究机构称在4月份就已超过
- 疑似iPhone 13 mini原型机曝光:后置相机模组排布方式变化
- 富士康海外工厂遭黑客攻击 被勒索1804枚比特币
- 斗鱼递交私有化退市文件 与虎牙合并暂无完成时间表