- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 编译预处理 教学目的: 1.了解并灵活掌握宏定义的使用; 2.掌握文件包含; 3.了解条件编译。 教学重点: 1.掌握宏定义的使用; 2.掌握文件包含。 教学难点: 1.条件编译。 9.3 条件编译 条件编译命令有以下三种形式: (1)#ifdef 标识符 程序段1 #else 程序段2 #endif 作用:当所指定的标识符已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2。 其中#else部分可以没有,即 #ifdef 标识符 程序段1 #endif (2)#ifndef 标识符 程序段1 #else 程序段2 #endif 作用:当所指定的标识符未被定义过,则编译程序段1,否则编译程序段2。 (3)#if 标识符 程序段1 #else 程序段2 #endif 作用:当指定的表达式值为真(非零)时就编译程序段1,否则编译程序段2。 可以事先给定一定条件,使程序在不同的条件下执行不同的功能。 * C 第九章 编译预处理 * 9.1 宏定义 9.2 “文件包含”处理 9.3 条件编译 第九章 编译预处理 讲授:顾正兰 1. Turbo C的编译过程 TC整个编译过程分两步:编译预处理和正式编译; 编译预处理——根据编译预处理命令进行; 正式编译——在预处理的基础上进行,包括词法、 语法分析和目标代码的生成。 由于TC采用单趟扫描编译,因而在发出编译命 令后,编译预处理和正式编译一次完成,其间不会 产生预处理后的中间文件。 概述 2. 预处理命令的分类 主要有三类:宏定义 文件包含 条件编译(改善程序的可移植性) 3. 预处理命令的使用要求 1) 以#号打头; 2) 不是C语句,而不必以分号结束; 3) 通常书写在函数之外、源文件开头; 用一个标识符来代表一个字符串; 宏定义分为不带参数和带参数的宏定义。 1. 无参宏定义 一般形式:#define 宏名 宏字符串 其中: 1) define是宏定义命令名; 2) 宏名按C标识符命名规则命名,通常字母大写; 3) 宏串是不加双引号的字符序列; 4) 当宏串为数字串时,宏名又称为符号常量。 9.1 宏定义 作用: 在编译预处理阶段,将定义点之后的宏名全部 用宏串替换;替换过程也称为宏展开。 意义: 1) 便于参数的修改,一改全改; 2) 一次定义可多处引用,可减少书写量。 #define PI 3.141592 main( ) { float r, c, s; printf(Enter radius:); scanf(%f, r); c=2.0*PI*r; /*展开后: c=2.0*3.141592*r;*/ s=PI*r*r; /*展开后: s=3.141592*r*r;*/ printf(C=%-10.2f\nS=%-10.2f\n, c, s); } Enter radius: 1↙ C=6.28 S=3.14 例:输入半径r,求圆周长和圆面积。 1) 利用TC的预处理实用程序CPP.EXE,可仅完成预 编译并产生预编译的中间文件,其扩展名为.i 对上例: 执行CPP.EXE程序对EXA91.C进行预处理: C:\TCCPP?C:\TC\CPRG\EXA91.C↙ 显示预编译中间文件的内容: C:\TCTYPE?EXA91. I↙ 使用说明: 2) 一个宏命令只能定义一个宏名; 3) 宏串中的每个字符都是有效字符; 下例多余字符均导致编译出错: #define PI 3.141592 宏展开结果:c=2.0*3.141592*r; #define PI 3.141592; 宏展开结果:c=2.0*3.141592; *r; 4) 宏定义可书写在函数之外的任何位置;一个宏名 的有效范围是定义点开始直到
文档评论(0)