- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级语言程序设计 南京邮电大学计算机学院 计算机软件教学中心 高级语言程序设计 第09章 编译预处理与多文件工程程序 内容提要 编译预处理的概念 多文件工程程序的组织方式 模块化程序设计的基本方法 * 9.1 编译预处理 编译预处理(Preprocessor) 编译器根据源程序中的编译预处理指令对源程序文本进行相应操作的过程 编译预处理指令都以“#”开头 它不是C语言语句,结尾不带“;”号 三种编译预处理指令 文件包含(Including files) 宏定义(Macro Definition) 条件编译(Conditional Compilation) * 文件包含 头文件(Header File) 主要的作用是保存程序的声明,包括:功能函数原型、数据类型的声明等,如:stdio.h、math.h、string.h等。 文件包含指令的一般格式为: #include 头文件名 到编译系统指定的标准目录(\include)下去查找该头文件,若没有找到就报错。多用于包含标准头文件。 #include 头文件名“ 首先到当前工作目录中查找头文件;若没找到,再到查找编译系统指定的标准目录中查找。多用于包含用户自定义的头文件。 * 宏定义 宏定义 将一个标识符定义为一个字符串。 在编译预处理时,源程序中的该标识符均以指定的字符串来代替。 宏定义也称为宏替换。 宏定义指令分为: 无参宏指令 带参宏指令 * 宏定义 无参宏指令 #define 标识符 字符串 例9.1无参宏指令应用示例 * #define PI 3.14159 /*无参宏定义1,符号常量*/ #define ISPOSITIVE 0 /*无参宏定义2*/ #define FORMAT Area=%f\n /*无参宏定义3*/ #define ERRMSG Input error!\n /*无参宏定义4*/ … 思考题:若在本例宏定义命令的后面都加上“;”号,程序是否还能正确编译? 宏定义 带参宏指令 #define 标识符 ( 参数列表 ) 例9.2 带参宏指令应用示例 * #define SUB(a,b) a-b /*带参宏定义*/ … c=SUB(a,b); /*替换为:c=a-b; */ … c=SUB(3,1+2); /*替换为:c=3-1+2; 结果不为0*/ 思考题:如何修改本例宏定义使得SUB(3,1+2)的结果为0? 宏定义 取消宏定义指令 #undef 标识符 例如: #undef PI 表示取消标识符PI的宏定义 * 条件编译 条件编译指令格式1: #ifdef 标识符 程序段1 [#else 程序段2 ] #endif 例9.3 条件编译指令应用示例 用于程序的调试信息的输出 * 条件编译 条件编译指令格式2: #ifndef 标识符 程序段1 [#else 程序段2 ] #endif 可以用来防止头文件的重复包含 具体下面9.2节介绍 * 9.2 多文件工程程序 多文件工程程序(Project with Multiple Source Files) 程序代码按一定的分类原则被划分为若干个部分,也称为模块(Module) 优势: 使程序结构更加清晰 便于程序的分工协作开发 便于程序的维护 * 多文件工程程序的组织结构 将不同的功能和数据结构划分到不同的模块中 不同类型的程序放在不同的(.c)源文件中 将函数的定义和使用相分离 将函数的定义从程序其他代码中分离出来,单独存放,有利于函数的重用 将函数的声明和实现相分离 将函数的原型声明放在一个(.h)头文件中 将函数的具体实现放在另一个(.c)源文件中 * 多文件工程程序的组织结构 例9.4 设计一个多文件工程程序,其功能是计算圆和矩形的面积和周长。 在VC++环境下分析程序结构,并运行之。 * 注意:main.c中#include “circle.h”等使用了双引号 注意:circle.h等中使用了条件编译指令,防止函数被重复声明 外部变量与外部函数 在一个程序文件中定义的变量或函数被其他程序文件所使用 外部变量(External Variable) extern 变量名; 外部函数(External Function) extern 函数声明; * 外部变量与外部函数 例9.5 外部变量与外部函数示例 * A.c … extern void fb(); extern void fc(); int x=0; … B.c … ex
文档评论(0)