已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章预处理命令 教师于扬 主要内容 一 宏定义二 文件包含三 条件编译 预处理命令 所谓预处理 就是C编译程序对C源程序编译前由编译预处理程序对预处理命令进行处理的过程 C语言中 以 开头 如 define 的语句统称为编译预处理命令 这些命令必须在一行的开头以 开始 末尾不加分号 以区别一般的C语句 C语言的预处理命令 按功能不同分三类 宏定义 define undef文件包含 include条件编译 if else 9 1宏定义 宏替换 一 不带参数的宏定义即符号常量定义语句 就是用一个指定的标识符来代表一个字符串 其一般形式为 define宏名 标识符 替换文本编译时编译预处理程序自动对源程序中的 宏名 用 替换文本 来替换 也叫作宏展开 例如 defineLENGTH300 definePI3 1415926 宏替换使用说明 1 宏名一般用大写字母 以示与一般变量区别 2 使用宏替换的作用是提高程序的清晰性 可移植性 3 在同一个程序段中 同一个宏名不能重复定义 4 替换文本 中可以包含已定义过的宏名 5 替换文本 不能替换双引号中的字符串 defineR3 0 definePI3 1415926 defineL2 PI R definesPI R Rmain printf L f nS f n L S 6 宏定义是用宏名代替一个字符串 是简单的置换 并不作语法检查 例 definePI3 l4l59其中将3 l4l59中的1误写成l 在编译此名时并不指出宏定义有错误 而是在编译到含有PI的语句时指出PI有错 7 宏定义语句末尾不能加分号 否则会连分号一起置换 8 可用 undef命令终止宏定义的作用域 9 宏定义是专门用于预处理命令的一个专用名词 它与定义变量的含义不同 只作字符替换 不分配内存空间 9 1 2带参数的宏定义 一般形式 define宏名 参数表 字符串说明 字符串 中包含 参数表 中所指定的参数 例 带参数的宏定义 defineDB x x 2 main doubley floatz 10 y DB z 等价于 y z 2 printf y f n y 区别函数和带参数的宏定义 函数调用时 先求出实参表达式的值 再用这个值赋给形式参数 带参数的宏定义仅仅进行字符串的简单替换 函数调用是在程序运行时分配临时内存单元 而宏展开是在编译时进行 展开时不分配内存单元 不进行值传递 函数调用只占运行时间 宏替换只占编译时间 宏替换后使源程序增长 函数调用不会 写出下面程序的运行结果 defineMIN x y x y x y main inti 10 j 15 k k 10 MIN i j printf d n k 100 应展开为 10 x y x y 15 9 2文件包含 文件包含就是在一个文件中 包含另外一个文件的全部内容 文件包含功能由 include命令来实现 include命令的一般形式 include 文件名称 include在一些版本的C语言中 还允许 文件名 中带路径 include file2 c A A B B file1 c file1 c file2 c 包含 文件包含示意图 a b 说明 被包含的文件常以 h head 结尾 用在文件头部 被称为 标题文件 或 头部文件 其扩展名也可以为其它 如 c 如果需要修改一些常数 不必修改每个程序 只需修改一个文件 头部文件 即可 例9 8 include的使用 include includemain floata b floatc scanf f f 区别 文件名 和 关于 include的使用 include 文件名 带双引号的文件名 系统将先在源程序所在的目录内查找指定的包含文件 如果找不到 再按照系统指定的标准方式到相关的目录中去寻找 多用于包含用户文件 include文件名用尖括号括起来 则系统将直接按照指定的标准方式到相关的目录中去寻找 多用于包含标准库函数 FileEditRunCompileProjectOptionsDebugBreak watch Compiler Linker Environment Directories Includedirectories C TC INCLUDE Librarydirectories C TC LIB Outputdirectory D CDATA TurboCdirectory C TC Pickfilename Currentpickfile 使用文件包含需注意 一条文件包含命令只能包含一个文件 如果需要包含多个文件 就必须使用多条文件包含命令 文件包含的定义是可以嵌套的 即允许一个被包含的文件包含其它文件 被包含文件与其所在的文件在预编译后成为同一个文件 9 3条件编译 条件编译是指编译时对源程序的某种控制 在一定的条件下 源程序中的某些特殊语句参加编译 而在另一种条件下 同样的这些语句不参加编译 常用命令 ifdef命令 ifndef命令 if命令 条件编译格式一 ifdef命令 格式 ifdef标识符程序段1 else程序段2 endif功能 当 标识符 已经被定义过 则编译程序段1 否则编译程序段2 条件编译格式二 ifndef命令 格式 ifndef标识符程序段1 else程序段2 endif功能 当 标识符 未被定义过 则编译程序段1 否则编译程序段2 条件编译格式三 if命令 格式 if表达式程序段1 else程序段2 endif功能 当 表达式 的值非0时 则编译程序段1 否则编译程序段2 例1 defineDEBUGmain inta 14 b 15 c c a b ifdefDEBUGprintf a d b d n a b elseprintf c d n c endif 例2 main inta 14 b 15 c c a b ifndefDEBUGprintf a d b d n a b elseprintf c d n c endif 例3 defineDEBUG1main inta 14 b 15 c c a b ifDEBUGprintf a d b d n a b elseprintf c d n c endif 9 4预定义宏 预定义宏是C编译器预先定义好的宏 不是用户定义的 因而不能出现在 define与 undef语句中 如 FILE DATE 等一些常见预定义宏标识符 例 预定义宏使用举例 main printf s n FILE printf s n DATE printf s n TIME 结果显示 c data a cMay22200121 02 54 9 5运算符 和 在带参数的宏替换中 若形参中含有 例如 definedisplay i printf i display Thisisatest 则替换为 printf Thisisatest 字符串 字符串 宏替换符号 例如 构造标识符 definevar n i n i var x 4 x4 字符串1 字符串2 字符串1字符串2 课堂练习 1 以下叙述中不正确的是 A 预处理命令行都必须以 号开始 B C程序中凡是以 开始的命令行都是预处理命令行 C C程序在执行过程中对预处理命令进行预处理 D 以下是正确的宏定义 defineIBM PC 2 在宏定义 definePI3 1415926中 用宏名PI代替一个 A 常量 B 单精度数 C 双精度数 D 字符串 3 以下程序的运行结果是 include stdio h defineFUDGE y 2 84 y definePR a printf d int a definePRINT1 a PR a putchar n main intx 2 PRINT1 FUDGE 5 x 4 以下程序的运行结果是 main intb 5 defineb2 definef x b x inty 3 printf 4d f y 1 undefbprintf 4d f y 1 defineb3printf 4d n f y 1 5 设有以下程序 为使之正确运行 请填入应包含的命令行 其中 tryme 函数在a myfile1 c中有定义 main printf n tryme 读程序 写结果 definePR ar printf d ar main intj a 1 3 5 7 9 11 13 15 i 5 for j 3 j j switch j case1 case2 PR a i break case3 PR a i 若有宏定义如下 define
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年亳州市工会系统事业单位人员招聘考试备考试题及答案详解
- 2026海南中学校园招聘事业编制人员16人考试备考题库及答案解析
- 2026智新半导体有限公司招聘笔试备考题库及答案解析
- 2026年恩施市文化和旅游系统事业单位人员招聘考试备考试题及答案详解
- 2026年北京市社区工作者招聘考试备考试题及答案详解
- 2026年鞍山市医疗系统事业编乡村医生人员招聘考试备考试题及答案详解
- 2026湖南株洲市攸县城镇公益性岗位招聘计划(第一批)12人考试备考试题及答案解析
- 2026年宾阳县人民医院医护人员招聘笔试模拟试题及答案解析
- 2026河南金水人才集团法律服务岗招聘5人考试备考试题及答案解析
- 2026年德宏市应急管理系统事业单位人员招聘考试备考试题及答案详解
- 2026年公务乘车座次礼仪与司机沟通规范问答
- 2026年北京市西城区高三二模英语试卷(含答案)
- 2026重庆璧山文化旅游产业有限公司面向社会招聘5人备考题库及答案详解(各地真题)
- 济宁市2026届省属公费师范毕业生就业岗位需求备考题库(112个)含答案详解(能力提升)
- 【 道法 】社会主义市场经济体制课件-2025-2026学年统编版道德与法治八年级下册
- 2026届百师联盟高三下学期考前适应性训练(一) 英语试题+答案
- 2026四川三江新能源供应链科技有限责任公司第一批社会招聘7人笔试参考题库及答案解析
- 2026年高校基建处工程管理岗应聘笔试指南及项目流程
- 2026年煤矿采煤工试题及答案
- 2025四川宜宾市科技人才集团有限公司第三批员工招聘10人笔试历年参考题库附带答案详解
- 《马克思主义与社会科学方法论》课件第一讲马克思主义与社会科学方法论导论
评论
0/150
提交评论