




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 文件分割和多文件编译 2 本章重点 函数编写与函数参数的传递多文件系统多文件系统中使用make使用autotools 3 2 1函数 函数指功能相对独立 由一系列语句组成的模块 它的目的有 当设计一个大型程序时 如果能够将这个程序依照功能 将其分割成较小的功能 然后依据这些小功能的要求编写函数 可以使程序简单化 同时也会使最后检查错误变得容易 在一个程序中 会产生指令重复使用多次的问题 将这些重复使用的指令编写成一个函数 需要时加以调用 可以提高编程效率 也可以使程序精简 4 2 1 1函数简介 C语言函数可分为库函数和用户定义函数 库函数 由C系统提供 用户无须定义 也不必在程序中作类型说明 只需在程序前包含有该函数原型的头文件即可在程序中直接调用 用户自定义函数 由用户按需要编写的函数 对于用户自定义函数 不仅要在程序中定义函数本身 在很多情况下还必须对该函数进行原型说明 然后才能使用 5 2 1 1函数简介 例2 1 设计一个程序 要求在屏幕上打印输出五行 Linux程序设计 有点意思 的字符串 步骤1 编辑源程序代码 步骤2 用gcc编译程序 root localhostroot gcc2 1 c o2 1步骤3 运行程序 root localhostroot 2 1 6 2 1 1函数简介 在c语言中 所有的函数定义都是平行的 即在一个函数的函数体内 不能再定义另一个函数 但是函数之间允许相互调用 也允许嵌套调用 习惯上把调用者称为主调函数 函数还可以自己调用自己 称为递归调用 函数的一般形式 函数类型函数名 形参类型 形式参数1 形参类型 形式参数2 类型说明 语句 7 2 1 2返回值 函数调用时 主调函数把实参的值传送给被调函数的形参 从而实现主调函数向被调函数的数据传送 函数调用中数据传送是单向的 即只能把实参的值传送给形参 而不能把形参的值反向地传送给实参 因此在函数调用过程中 形参的值发生改变 并不会影响到实参 函数运行结束 如果被调函数的结果需要传递回主调函数 通常用用return完成这项任务 叫函数的返回值 8 2 1 2返回值 例2 2 设计一个程序 要求编写函数max 有两个参数 返回两个数中的最大值给主函数 步骤1 编辑源程序代码 步骤2 用gcc编译程序 root localhostroot gcc2 2 c o2 2步骤3 运行程序 root localhostroot 2 2 思考题 如果把此例中的数据传递改成指针传送 程序应该如何设计 9 2 2文件分割 例2 3 设计一个程序 要求计算输入的整数的平均值 并将此程序分割成多个小文件 步骤1 编辑源程序代码 10 2 2文件分割 步骤2 分析程序 分割文件将此程序分割成下列2个Linuxc程序 1 2 3 main c为主程序 2 2 3 avg c为avg函数的定义 步骤3 用gcc编译程序 root localhostroot gcc2 3 main c2 3 avg c o2 3步骤4 运行程序 root localhostroot 2 3 11 2 2文件分割 Linuxc文件分割 主要是把每个自定义函数分割成独立的c源程序文件 自定义函数的声明部分需要包含在主调函数中 这儿的主调函数是main 如果自定义函数较多 也可以把函数声明都分割成独立的头文件 在主调函数中用 include包含分割出来的头文件 思考题 如何把自定义函数的声明部分 也分割成独立的文件 分割后如何编译 12 2 2文件分割 例2 4 分割例2 2中的程序 要求分割后自定义函数在另一个独立的文件中 步骤1 分析程序 分割文件例2 2程序有主函数main和自定义函数max 再把函数声明都分割成独立的头文件 可将此程序分割成下列3个文件 1 2 4 main c为主程序 2 2 4 max c为max函数的定义 3 max h为头文件 内含max函数的声明 13 2 2文件分割 步骤2 用gcc编译程序 root localhostroot gcc2 4 main c2 4 max c o2 4步骤3 运行程序 root localhostroot 2 4 思考题 能否将此例中的 include max h 修改成 include 为什么 14 2 3make工程管理器 make工程管理器是一个 自动编译管理器 这里的 自动 是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量 同时 它通过读入makefile文件的内容来执行大量的编译工作 用户只需编写一次简单的编译语句就可以了 它大大的提高了实际的工作效率 15 2 3 1编写makefile文件 在一个Makefile文件中通常包含如下内容 需要由make工具创建的目标体 target 通常是目标文件或可执行文件 要创建的目标所依赖的文件 创建每个目标体时需要运行的命令 16 2 3 1编写makefile文件 例2 5 设计一个程序 要求计算学生的总成绩和平均成绩 并用make工程管理器编译 步骤1 分析程序 分割文件此程序有主函数main和自定义函数fun sum和fun avg 再把函数声明都分割成独立的头文件 可将此程序分割成下列4个文件 1 2 5 main c为主程序 2 chengji h为头文件 内含fun avg和fun sum函数的声明 3 2 5 fun sum c为fun sum函数的定义 4 2 5 fun avg c为fun avg函数的定义 17 2 3 1编写makefile文件 步骤2 编辑makefile文件 root localhostroot vimmakefile2 5makefile内容 步骤3 用make命令编译程序 root localhostroot make fmakefile2 5 步骤4 用make命令再次编译修改4个文件中的一个 重新用make编译 会发现只编译了2 5 main c程序 另外的2个c源程序文件根本没有重新编译 步骤5 运行程序 root localhostroot 2 5 从结果来看 在没有使用gcc编译器命令情况下 依然把设计的程序编译成了可执行文件 实现了设计的功能 可见make工程管理器调用了gcc编译器 makefile文件的编写是重点 18 2 3 2makefile变量的使用 例2 6 设计一个程序 程序运行时从三道题目中随机抽取一道 题目存放在二维数组中 步骤1 分析程序 分割文件此程序有主函数main和自定义函数fun shuiji 可以分割成两个 c 程序文件 再把函数声明和用到的库函数的头文件 分割到一个独立的自定义头文件 shuiji h 因此 可将此程序分割成3个文件 1 2 6 main c为主程序 2 shuiji h为头文件 3 2 6 fun sum c文件 19 2 3 2makefile变量的使用 步骤2 编辑makefile文件 root localhostroot vimmakefile2 6 一般的makefile写法 使用变量的makefile写法如下 步骤3 用make命令编译程序 root localhostroot make fmakefile2 6 步骤4 运行程序 root localhostroot 2 6 20 2 3 2makefile变量的使用 Makefile中常见预定义变量 21 2 3 2makefile变量的使用 Makefile中常见自动变量 思考题 如果此例的题目数 题目内容以及随机抽取的题目量 都由用户决定 应该如何修改程序 makefile文件要不要修改 22 2 3 3make和makefile makefile文件主要包含了5部分内容 显式规则 说明了如何生成一个或多个目标文件 由makefile文件的创作者指出 包括要生成的文件 文件的依赖文件 生成的命令 隐式规则 由于make有自动推导的功能 所以隐式的规则可以比较粗糙地简略书写makefile文件 这是由make所支持的 变量定义 在makefile文件中要定义一系列的变量 变量一般都是字符串 这与C语言中的宏有些类似 当makefile文件执行时 其中的变量都会扩展到相应的引用位置上 23 2 3 3make和makefile 文件指示 其包括3个部分 一个是在一个makefile文件中引用另一个makefile文件 另一个是指根据某些情况指定makefile文件中的有效部分 还有就是定义一个多行的命令 注释 makefile文件中只有行注释 其注释用 字符 如果要在makefile文件中使用 字符 可以用反斜框进行转义 如 24 2 3 3make和makefile GNU的make工作时的执行步骤 读入所有的makefile文件 读入被include包括的其他makefile文件 初始化文件中的变量 推导隐式规则 并分析所有规则 为所有的目标文件创建依赖关系链 根据依赖关系 决定哪些目标要重新生成 执行生成命令 25 2 4autotools的使用 autotools工具只需用户输入简单的目标文件 依赖文件 文件目录等就可以轻松地生成makefile了 可以完成系统配置信息的收集 从而可以方便地处理各种移植性的问题 autotools是系列工具 包含有 aclocalautoscanautoconfautoheaderautomake 26 2 4autotools的使用 用autotools产生Makefile文件的总体流程 27 2 4autotools的使用 利用autotools系列工具生成 Makefile 文件的基本步骤 28 2 4autotools的使用 例2 7 利用例2 3中的两个程序文件 2 3 main c 和 2 3 avg c 把它们的文件名分别改成 2 7 main c 和 2 7 avg c 用autotools工具生成makefile文件 步骤1 使用autoscan 29 2 4autotools的使用 步骤2 修改 configure scan 文件 重命名成 configure in 文件修改时需要增加一个宏AM INIT AUTOMAKE PACKAGE VERSION 还要把AC CONFIG HEADER更改为AM CONFIG HEADER 修改后 用mv命令重命名 root localhostroot mvconfigure scanconfigure in 步骤3 使用aclocal autoconf和autoheader 步骤4 使用automakeautomake需要的脚本配置文件是 Makefile am 这个文件需要自己建立 root localhostroot vimMakefile am 特别说明 AUTOMAKE OPTIONS为设置automake的选项 automake提供了3种软件等级 foreign gnu gnits 让用户选择使用 默认等级是gnu 现在使用的foreign只是检测必要的文件 bin PROGRAMS定义了要产生的执行文件名 如果产生多个可执行文件 每个文件名用空格隔开 file SOURCES定义file这个执行程序的依赖文件 同样的 对于多个执行文件 那就要定义相应的file SOURCES AUTOMAKE OPTIONS foreignbin PROGRAMS testtest SOURCES 2 7 main c2 7 avg c 30 2 4autotools的使用 步骤5 运行configure步骤6 将程序打包发布 root localhostautomake makedist root localhostautomake ls 31 2 4autotools的使用 autotools生成的makefile是最常见的开源软件提供的方式 安装此类开源软件的一般步骤 解压 tartest 1 0 tar gz输入 configure 执行confi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Stearoyl-L-carnitine-chloride-Standard-生命科学试剂-MCE
- rac-Butoconazole-d5-Nitrate-生命科学试剂-MCE
- 报关员资格证考试题型及答案
- 第4课 希腊城邦和亚历山大帝国 课件 九年级历史上册
- 海水考试题及答案
- 保安队长笔试考试题目及答案
- 电测仪表理论知识培训课件
- 2025年筛分设备项目规划申请报告
- 高考历史考试题及答案:元代山西晋商的早期商业活动(如盐业)
- 高考历史考试题及答案:宋代福建地区的瓷器烧制(德化瓷)
- 广东省广州市2025届八年级英语第二学期期末教学质量检测试题含答案
- 学校法律服务协议书
- 夫妻流产同意协议书
- 《氢化工基础》课件-4.非均相分离
- 小儿麻醉护理课件
- DB64 2000-2024 自然资源调查监测技术规程
- DB22-T3409-2022-餐饮用醇基液体燃料安全使用技术规范-吉林省
- 项目经理考核试题及答案
- 车载信息娱乐系统的设计与开发-全面剖析
- 安检岗位培训课件模板
- 2025-2030中国水产饲料原料和产品行业市场现状供需分析及投资评估规划分析研究报告
评论
0/150
提交评论