c语言第8章预处理.ppt

上传人:max****ui 文档编号:6334601 上传时间:2020-02-23 格式:PPT 页数:22 大小:218.50KB
返回 下载 相关 举报
c语言第8章预处理.ppt_第1页
第1页 / 共22页
c语言第8章预处理.ppt_第2页
第2页 / 共22页
c语言第8章预处理.ppt_第3页
第3页 / 共22页
点击查看更多>>
资源描述
C语言程序设计第八章预处理命令 第八章编译预处理 目的 为了简化程序的编写 提高程序的可移植性 可读性 模块化 C语言设计了若干命令 编译预处理命令 并可出现于程序当中 处理流程 第一次编译扫描时 将预编译命令处理完 然后再进行正式编译 生成目标代码 1 宏定义命令 有三种类型的预处理命令 为了与C语句区别 这些命令均以 开头 2 文件包含命令 3 条件编译命令 简化程序的书写 提高可读性 可移植性 一 无参数形式 define标识符字符串表达式 宏定义分为 无参数和有参数二种形式 include defineL x x 2 x x main intx y printf inputanumber scanf d 例如 上例中 defineL x x 2 x x 在y L L 2 L 10 中作了宏调用 在预处理时经宏展开后该语句变为 y x x 2 x x x x 2 x x 2 x x 2 x x 10 注意几点 1 宏定义是用宏名来表示一个字符串 在宏展开时又以该字符串取代宏名 只是一种简单的代换 2 宏定义不是说明或语句 在行末不加分号 3 宏定义必须写在函数之外 其作用域为宏定义命令起到源程序结束 4 用引号括起来的宏名 预处理程序不对其作宏代换 5 宏定义允许嵌套 在宏定义的字符串中可以使用已经定义的宏名 在宏展开时由预处理程序层层代换 6 宏名一般用大写字母表示 以便于与变量区别 二 有参形式 合适于字符串表达式序列中有变化的字符 将这部分字符可定义为参数 define宏名 形参表 字符串 带参宏定义的一般形式为 例如 defineL x x x 2 x x 带参数宏定义 宏调用 y L 5 在宏调用时 用实参5去代替形参x 经预处理宏展开后的语句为 y 5 5 2 5 5 例 include defineMAX a b a b a bmain intx y max scanf d d 说明 上例程序中 表达式 a b a b由宏名MAX表示 形参a b均出现在条件表达式中 程序中 max MAX x y 为宏调用 实参x y将代换形参a b 宏展开后该语句为 max x y x y 注意几点 1 宏定义中 宏名和形参表之间不能有空格出现 例如 defineMAX a b a b a b将被认为宏名MAX代表的字符串是 a b a b a b 是无参宏定义 2 在带参宏定义中 形式参数不同于函数中的形参 带参宏定义中的参数不是变量 只是在宏调用时用实参的符号去代换形参 即只是符号代换 所以 不存在值传递的问题 3 在宏定义中的形参是标识符 而宏调用中的实参可以是表达式 4 在宏定义中的形参最好用括号括起来 以避免出错 如果去掉上例中 y y 表达式的括号 宏代换后将得到以下语句 y sin x l sin x l 显然 展开后的表达式与题意相违 为了保证宏代换的正确性 应该给宏定义中的表示表达式的字符串加上括号 如 defineL x x x 2 宏调用 y l L a 5 宏代换后 y l a 5 a 5 2 如果字符串没有加上括号 宏代换后会得到完全不同的表达式 y l a 5 a 5 2 5 带参宏与带参函数的区别 8 2文件包含 C语言允许在一个文件预编译时 将另一个文件原封不动地包含进来 目的 当函数不在一个文件中 既可用link连接编译后的obj文件 也可用 文件包含 方式 当一组符号常量的定义为公用时 可作为一个独立的文件被其它文件包含 格式 include 文件名 include f2 c main 例 f1 c f2 c 预编译后 1 一个include只能写一个文件 包含多个文件需多个include 只在f1 c中用 include include f2 c include f3 c 分别在f1 c f2 c中用 include在f1 c中 include f2 c 在f2 c中 include f3 c 2 当f1 c包含f2 c 而f2 c又包含f3 c时 有两种包含形式 3 一般用 h扩展名命名被包含文件 h为head之意以与一般 c文件区别 如系统stdio h 系统 h文件在子目录INCLUDE下 4 include后的文件名既可用 也可用 两者区别 首先在当前目录中找 然后再去标准目录中找 只在标准目录 include目录 中找 5 被包含文件和包含文件最后形成一个文件 因此 全局变量作用域为整个文件 不必用extern说明 8 3条件编译 有时 C程序的一部分语句是否起作用要根据一定的条件 即由条件而决定是否起作用 例如 调试程序时 需加多条printf 但调试完则要一一删除 有的语句也视条件而决定其具体形式 形式1 ifdef标识符程序段1 else程序段2 endif 条件编译命令的三种形式 功能当标识符在此之前被定义过 即用 define定义过 则编译程序段1 否则编译程序段2 其中 程序段即可为语句组 也可为命令行 例 为了调试程序 加上以下条件编译 ifdefDEBUGprintf x d y d z d x y z endif 另 else后面部分可没有 但 endif保留 只要在此之前有 defineDEBUG则编译printf x d y d z d x y z 例 exp11 5 c include defineENprintf Pleaseinputnumber n main inta 123 b 456 ifdefEN prinft Thisistest a d n a else prinft Thisistest b d n b endif 编译时会有警告 b isassignedavaluethatisneverused 运行结果 Thisistest a 123 形式2 infdef标识符程序段1 else程序段2 endif 功能 与形式1的条件正好相反 即 当标识符未被定义 则编译程序段1 否则编译程序段2 例 exp11 5 c include defineENprintf Pleaseinputnumber n main inta 123 b 456 ifndefEN prinft Thisistest a d n a else prinft Thisistest b d n b endif 编译时会有警告 a isassignedavaluethatisneverused 运行结果 Thisistest b 456 形式3 if表达式程序段1 else程序段2 endif 功能 当表达式 0 则编译程序段1 否则编译程序段2 例 输入一任意字符串 需将其全部转化为大写字母 或者将其转化为小写字母 只编一个程序 程序中用条件编译 决定是全部转为大写字母还是小写字母 i 0 while c str i o ifLETTERif c a defineLETTER1 0main charstr 5 inti 0 for i 0 i 5 i scanf s 程序运行后 若输入 aBcDE则运行结果为 str 0 astr 1 bstr 2 cstr 3 dstr 4 e
展开阅读全文
相关资源
相关搜索

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


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

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


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