C语言-第07章预处理.ppt

上传人:max****ui 文档编号:8291276 上传时间:2020-03-28 格式:PPT 页数:28 大小:287KB
返回 下载 相关 举报
C语言-第07章预处理.ppt_第1页
第1页 / 共28页
C语言-第07章预处理.ppt_第2页
第2页 / 共28页
C语言-第07章预处理.ppt_第3页
第3页 / 共28页
点击查看更多>>
资源描述
第7章 预处理命令 主要内容 7 1概述7 2宏定义7 3 文件包含 处理 7 1概述 合理地使用预处理功能可以程序便于阅读 修改 移植和调试 也有利于模块华程序设计 以 号开头的预处理命令 如 include 宏定义命令 define等 这些预处理命令放在函数之外 一般放在源文件的前面 称为预处理部分 7 2宏定义 7 2 1无参宏定义 宏定义一般形式为 define标识符字符串例如 definePI3 1415926 宏定义的作用是在本程序文件中用指定的标识符PI来代替 3 1415926 这个字符串 在编译预处理时 将程序中在该命令以后出现的所有的PI都用 3 1415926 代替 这种方法使用户能以一个简单的名字代替一个长的字符串 这个标识符 名字 称为 宏名 在预编译时将宏名替换成字符串的过程称为宏替换或宏展开 define是宏定义命令 例7 1 不带参数宏的使用 1 宏名一般习惯用大写字母表示 以便与变量名相区别 但这并非规定 也可用小写字母 2 使用宏名代替一个字符串 可以减少程序中重复书写某些字符串的工作量 宏定义是用宏名代替一个字符串 只作简单置换 不作正确性检查 如有错误 只能在编译已被宏展开后的源程序时发现 说明 3 宏定义不是说明或 语句 不必在行末加分号 如果加了分号则会连分号一起进行置换 4 define命令出现在程序中函数的外面 宏名的有效范围为定义命令之后到本源文件结束 通常 define命令写在文件开头 函数之前 作为文件一部分 在此文件范围内有效 可以用 undef命令终止宏定义的作用域 说明 defineG9 8 voidmain G的有效范围 undefGf1 在f1函数中 不再代表9 8 这样可以灵活控制宏定义的作用范围 5 宏名在源程序中若用引号括起来 则预处理程序不对其作宏代换 说明 例7 2 defineOK100voidmain printf OK printf n 6 宏定义允许嵌套 在宏定义的字符串中可以使用已经定义的宏名 在宏展开时由预处理程序层层代换 说明 例如 definePI3 1415926 defineSPI y y对语句printf f S 在宏替换后变为 printf f 3 1415926 y y 7 对 输出格式 作宏定义 可以减少书定麻烦 说明 例7 3 中就采用了 7 那种方法 include definePprintf defineD d n defineF f n voidmain inta 5 c 8 e 11 floatb 3 8 d 9 7 f 21 08 P DF a b P DF c d P DF e f 执行结果 53 80000089 7000001121 080000 下面叙述中正确的是 A 宏定义是C语句 所以要在行末加分号B 可以使用 undef命令来终止宏定义的作用域C 在进行宏定义时 宏定义不能层层嵌套D 对程序中用双引号括起来的字符串内的字符 与宏名相同的要进行置换 B 7 2 2带参数的宏定义 作用 不是进行简单的字符串替换 还要进行参数替换 带参数的宏定义一般形式为 define宏名 形参表 字符串 带参宏调用的一般形式为 宏名 实参表 其中 宏名同不带参的宏名 习惯用大写字母 形参表由一个或多个参数构成 注意形参与函数形参的区别 参数只有参数名 没有数据类型 只作替换 不分配内存空间 例如 defineM y y y 3 y k M 5 在宏调用时 用实参代替形参y 经预处理宏展开后的语句为 K 5 5 3 5 例7 4 带参宏替换 执行结果 Inputtwonumbers 86Max 8 1 带参的宏定义中 宏名和形参表之间不能有空格出现 说明 例如 defineMAX a b a b a b如果写为 defineMAX a b a b a b将为认为是无参定义 宏名MAX代表字符串 a b a b a b 宏展开时 宏调用语句 max MAX x y 将变为 max a b a b a b x y 2 函数调用是在程序运行时处理的 为形参分配临时的内存单元 而宏展开则是在编译前进行的 在展开时并不分配内存单元 不进行值的传递处理 也没有 返回值 的概念 对函数中的实参和形参类型要求一致 而宏名无类型 它的参数也无类型 只是一个符号代表 展开时代入指定的字符串即可 宏定义时 字符串可以是任何类型的数据 3 在宏定义中的形参是标识符 而宏调用中的实参可以是表达式 说明 例7 5 表达式作为宏调用的实参 执行结果 Inputanumber 5sq 36 4 在宏定义中 字符串内的形参通常要用括号括起来以避免出错 在上例中的宏定义中 y y 表达式的y都用括号括起来 因此结果是正确的 如果去掉括号 把程序改为例7 6所示的形式 说明 例7 6 进行宏替换的一个典型例子 执行结果 Inputanumber 5sq 11 5 带参的宏和带参函数很相似 但在本质上是不同的 把同一表达式用函数处理与用宏处理两者的结果有可能是不同的 说明 例7 7 带参的函数和带参的宏的区别 执行结果 1491625 执行结果 1925 下列程序执行后的输出结果是 defineMA x x x 1 main inta 1 b 2 printf d n MA 1 a b 8 下列程序执行后的输出结果是 defineMA x x x 1 main inta 1 b 2 printf d n MA 1 a b 12 以下程序执行的输出结果是 defineMIN x y x y x y voidmain inti j k i 10 j 15 k 10 MIN i j printf d n k 15 下面程序的运行结果是 defineN10 defines x x x definef x x x main inti1 i2 i1 1000 s N i2 1000 f N printf d d n i1 i2 1000 10 其一般形式为 include 文件名 或 include 7 3文件包含 这两种形式是有区别的 使用尖括号表示在包含文件目录中去查找 包含目录是由用户在设置环境时设置的 而不在源文件目录去查找 使用双引号则表示首先在当前的源文件目录中查找 若未找到才到包含目录中去查找 用户编程时可根据自己文件所在的目录来选择某一种命令形式 一个include命令只能指定一个被包含文件 若隐若现多个文件要包含 则需用多个include命令 文件包含允许嵌套 即在一个被包含的文件中又可以包含另一个文件
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!