已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
27 03 2020 1 第九章预处理命令 编译预处理 在源程序文件中 加入 编译预处理命令 使编译程序在对源程序进行通常的编译 包括词法分析 语法分析 代码生成 代码优化 之前 先对这些命令进行预处理 然后将预处理的结果和源程序一起再进行通常的编译处理 以得到目标代码 OBJ文件 C提供的编译预处理命令宏命令 Macro 文件包含命令 include 条件编译命令这些命令均以 开头 以区别于语句 27 03 2020 荆州职业技术学院信息技术系 2 9 1宏 Macro 定义 一 不带参数的宏一般形式 define标识符字符串如 definePI3 1415926作用 用标识符 称为 宏名 PI代替字符串 3 1415926 在预编译时 将源程序中出现的宏名PI替换为字符串 3 1415926 这一替换过程称为 宏展开 define 宏定义命令 undef 终止宏定义命令 27 03 2020 荆州职业技术学院信息技术系 3 例 PI3 1415926main floatl s r v printf inputradius scanf f 27 03 2020 荆州职业技术学院信息技术系 4 关于宏定义的说明 1 一般宏名用大写字母表示 变量名一般用小写字母 2 使用宏可以提高程序的可读性和可移植性 如上述程序中 多处需要使用 值 用宏名既便于修改又意义明确 3 宏定义是用宏名代替字符串 宏扩展时仅作简单替换 不检查语法 语法检查在编译时进行 4 宏定义不是C语句 后面不能有分号 如果加入分号 则连分号一起替换 如 definePI3 1415926 area P r r 在宏扩展后成为 area 3 1315926 r r 结果 在编译时出现语法错误 27 03 2020 荆州职业技术学院信息技术系 5 5 通常把 define命令放在一个文件的开头 使其在本文件全部有效 define定义的宏仅在本文件有效 在其它文件中无效 这与全局变量不同 6 宏定义终止命令 undef结束先前定义的宏名 defineG9 8main undefG 取消G的意义 f1 27 03 2020 荆州职业技术学院信息技术系 6 7 宏定义中可以引用已定义的宏名 例8 2 defineR3 0 definePI3 1415926 deinfeL2 PI R defineSPI R Rmain printf L f nS f n L S 8 对程序中用双引号括起来的字符串 即使与宏名相同 也不替换 例如上例的printf语句中 双引号括起来L和S不被替换 27 03 2020 荆州职业技术学院信息技术系 7 二 带参数的宏一般形式 define宏名 参数表 字符串带参数的宏在展开时 不是进行简单的字符串替换 而是进行参数替换 例 27 03 2020 荆州职业技术学院信息技术系 8 例 definePI3 1415926 defineS r PI r rmain floata area a 3 6 area S a printf r f narea f n a area 说明 带参数的宏展开时 用实参字符串替换形参字符串 注意可能发生的错误 比较好的办法是宏定义的形参加括号 27 03 2020 荆州职业技术学院信息技术系 9 27 03 2020 荆州职业技术学院信息技术系 10 例 返回多个值的宏定义 definePI3 1415926 defineCIRCLE R L S V L 2 PI R S PI R R V 4 3 PI R R Rmain floatr l s v 半径 圆周长 圆面积 球体积 scanf f 输出结果 27 03 2020 荆州职业技术学院信息技术系 11 9 2文件包含 include 文件包含命令的一般格式是 include 文件名 作用 预处理时 把 文件名 指定的文件内容复制到本文件 再对合并后的文件进行编译 例 27 03 2020 荆州职业技术学院信息技术系 12 在文件中 有文件包含命令 include 预处理时 先把的内容复制到文件 再对进行编译 从理论上说 include命令可以包含任何类型的文件 只要这些文件的内容被扩展后符合C语言语法 一般 include命令用于包含扩展名为 h的 头文件 如stdio h string h math h 在这些文件中 一般定义符号常量 宏 或声明函数原型 2 文件 include print format h main inta b c d charstring CHINA a 1 b 2 c 3 d 4 PR D1 a PR D2 a b PR D3 a b c PR D4 a b c d PR S string 程序员也可以把自己定义的符号常量 宏 或函数原型放在头文件中 用 include命令包含这些头文件 1 文件print format h definePRprintf defineNL n defineD d defineD1DNL defineD2DDNL defineD3DDDNL defineD4DDDDNL defineS s 27 03 2020 荆州职业技术学院信息技术系 13 说明 1 一个include命令只能指定一个被包含文件 如果要包含n个文件 用n个Include命令 2 include命令的文件名 可以使用两种括号 include 先在引用被包含文件的目录查找文件 若没有 再到系统指定的目录查找 include仅在系统指定的目录查找文件 27 03 2020 荆州职业技术学院信息技术系 14 9 3条件编译 预处理程序提供了条件编译的功能 可以按不同的条件去编译不同的程序部分 因而产生不同的目标代码文件 这对于程序的移植和调试是很有用的 条件编译有三种形式 下面分别介绍 27 03 2020 荆州职业技术学院信息技术系 15 1 第一种形式 ifdef标识符程序段1 else程序段2 endif它的功能是 如果标识符已被 define命令定义过则对程序段1进行编译 否则对程序段2进行编译 如果没有程序段2 它为空 本格式中的 else可以没有 即可以写为 ifdef标识符程序段 endif 27 03 2020 荆州职业技术学院信息技术系 16 2 第二种形式 ifndef标识符程序段1 else程序段2 endif与第一种形式的区别是将 ifdef 改为 ifndef 它的功能是 如果标识符未被 define命令定义过则对程序段1进行编译 否则对程序段2进行编译 这与第一种形式的功能正相反 27 03 2020 荆州职
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《AE抠像技术》课件
- 2024年度矿井废弃物处理与生态恢复合同
- 电气专项:企业用电安全管理
- 2024年国际马拉松赛道草坪种植合同
- 2024年度单位与物业公司安保服务合同:确保单位财产安全的合作协议
- 2024年度苗木运输及保险服务合同
- 《食品添加剂的毒性》课件
- 2024年度园林景观电照施工合同2篇
- 2024年度股权投资合同:企业投资与股权转让协议
- 2024中国移动湖北公司春季校园招聘易考易错模拟试题(共500题)试卷后附参考答案
- 液化石油气站安全隐患检查记录表
- (中金)银行业分析框架ppt课件
- 《色彩搭配》PPT课件(教学)
- 《颈椎病病人的护理》PPT课件(完整版)
- 广州供电局输电部高压电缆运行工作介绍
- (完整版)电子科技大学微电子器件习题
- 学校课程规划方案
- 幼小衔接的主要内容
- 四年级数学期中质量分析ppt
- 兴趣小组活动
- 营运资金测算表
评论
0/150
提交评论