- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 编译预处理 本章要点 9.1 字 符 分 类 9.2 文 件 包 含 9.3 程序的移植 习题 8 9.1 字 符 分 类 9.1 字 符 分 类 9.1 字 符 分 类 9.1 字 符 分 类 9.1 字 符 分 类 9.2 文 件 包 含 9.2 文 件 包 含 9.2 文 件 包 含 9.3 程序的移植 9.3 程序的移植 9.3 程序的移植 9.3 程序的移植 9.3 程序的移植 9.3 程序的移植 9.3 程序的移植 9.3 程序的移植 9.3 程序的移植 * * 在线教务辅导网: 教材其余课件及动画素材请查阅在线教务辅导网 QQ:349134187 或者直接输入下面地址: 9.1.1 编译预处理的概念 编译预处理是指在编译系统对文件进行编译——词法分析、语法分析、代码生成及优化之前,对一些特殊的编译语句先进行处理,然后将处理的结果与源程序一起编译,生成目标文件。 在前面的学习中,已经见过很多的编译预处理语句,例如: #include stdio.h #define PI 3.14 编译预处理语句都是以#开头,其结尾不带分号(;),以表示与普通程序语句相区别。编译预处理语句分为三类:宏定义、文件包含和条件编译等,它常用于程序设计的模块化、移植和调试等方面。 9.1.2 宏定义 宏定义分为两种,不带参数的宏定义(即常量定义)与带参数的宏定义。 1.不带参数的宏定义 不带参数的宏定义形式如下: #define 标识符 表达式 不带参数的宏定义中的表达式可以是任意的常量,例如: #define NULL 0 #define EOF (-1) /* 括号不可省略*/ #define TRUE 1 #define FALSE 0 #define PI 3.14 #define TEXT unsigned char /*将unsigned char类型用TEXT来表示。*/ #define 定义时,不能重复相同的宏名定义。 宏定义完成后,在程序编译时将会用后面表达式中的常量去替换宏定义的标识符,例如: while(s!=NULL){…}; 上面的语句中,在编译预处理时,系统会先将NULL进行替换,语句变成如下形式: while(s!=0){…}; 在编译预处理完成后,再进行程序的编译。 由于编译预处理在这里只是作简单的替换,所以对后边的字符串常需要加上括号,否则,将会出现错误,如下所示: #define A 3 #define TA (2+A) main( ) {… s=3*TA; … } 上面是正确的宏定义方式,在编译预处理时会将语句“s=3*TA”替换为“s=3*(2+3)”。 如果没有括号,则会出现下面所示的错误: #define A 3 #define TA 2+A main( ) {… s=3*TA; … } 在上面的程序段中,编译预处理时会将语句“s=3*TA”替换为“s=3*2+3”由于运算符的优先级不同,导致结果发生错误。 编译预处理只是对宏定义的标识用后面的表达式进行简单替换,而不是对其内容进行解析。 2.带参数的宏定义 带参数的宏定义中,宏替换名可以带有形式参数,在程序中用到时,实际参数会代替这些形式参数。 带参数的宏定义形式如下: #define 宏名(参数表) 表达式 编译预处理时,系统会将程序中出现宏名和参数表的地方用后边的带参数的表达式进行替换,例如: #define max(x,y) ((x)(y)?(x):(y)) /* 参数必须加括号 */ 如果在程序中有如下调用: a=max(n+b,k+a); 系统将会按下面的形式进行替换: a=((n+b)(k+a)?(n+b):(k+a)); /*若不加括号,替换后由于优先级关系极易出错*/ 在预处理的替换完成后,程序再进行编译。 9.2.1 文件包含的意义 一个大型的程序通常都是分为多个模块,由不同的程序员编写,最终需要将它们汇集在一起进行编译。 另外,在程序设计中,有一些程序代码会经常使用,比如程序中的函数、宏定义等。 为了方便代码的重用和包含不同模块文件的程序,C语言提供了文件包含的方法。 文件包含用于在一个文件中包含另一个源程序文件,前面所用到的stdio.h和string.h等头文件引用都是用包含文件预处理来完成。 文件包含的意思是源程序中包含另一个源程序文件。如图9-2所示。 图9-2 文件包含 在图中,文件abc.c中的包含语句将文件stdio.h中的内容全部添加到文件abc.c
您可能关注的文档
- C语言程序设计教程 作者 李丽娟 第3章程序的简单算法制定.ppt
- C语言程序设计教程 作者 李丽娟 第4章分支语句.ppt
- C语言程序设计教程 作者 李丽娟 第5章循环结构.ppt
- C语言程序设计教程 作者 李丽娟 第6章函数与宏定义.ppt
- C语言程序设计教程 作者 李丽娟 第8章指针.ppt
- C语言程序设计教程 作者 李玲1 第1章.ppt
- C语言程序设计教程 作者 李玲1 第2章.ppt
- C语言程序设计教程 作者 李玲1 第3章.ppt
- C语言程序设计教程 作者 李玲1 第5章.ppt
- C语言程序设计教程 作者 李玲1 第8章.ppt
- C语言程序设计新视角 作者 周幸妮 全书教案_ 第0章.ppt
- C语言程序设计新视角 作者 周幸妮 全书教案_ 第2章.ppt
- C语言程序设计新视角 作者 周幸妮 全书教案_ 第4章.ppt
- C语言程序设计新视角 作者 周幸妮 全书教案_ 第5章.ppt
- C语言程序设计新视角 作者 周幸妮 全书教案_ 第6章.ppt
- C语言程序设计新视角 作者 周幸妮 全书教案_ 第7章.ppt
- C语言程序设计新视角 作者 周幸妮 全书教案_ 第9章.ppt
- C语言程序设计新视角 作者 周幸妮 全书教案_ 第10章.ppt
- C语言程序设计与应用 双色印刷 张小东 郑宏珍 第1章.ppt
- C语言程序设计与应用 双色印刷 张小东 郑宏珍 第3章.ppt
最近下载
- 农产品质量安全生产.pptx VIP
- 2025年全国高考物理考试大纲.doc VIP
- 【人教版】七年级英语上册:同步练习(全套,Word版,含答案).docx VIP
- 冠脉介入培训.pptx VIP
- 聚甲酚磺醛液联合聚甲酚磺醛栓治疗宫颈糜烂的疗效分析.pdf VIP
- 2024-2030年中国集成电路产业园区行业市场全景分析及投资前景展望报告.docx
- 2020年最新版化工机械基础(第二版)第一篇部分习题解答.docx VIP
- 第六单元(单元测试)-2024-2025学年语文二年级上册统编版.docx VIP
- 原调正谱bG爱人送我向日葵钢琴伴奏联考声乐谱.pdf VIP
- 广州市恩宁路历史文化街区保护利用规划.pdf VIP
文档评论(0)