C华南农业大学c语言课件第8章.ppt

上传人:max****ui 文档编号:8290741 上传时间:2020-03-28 格式:PPT 页数:17 大小:306.31KB
返回 下载 相关 举报
C华南农业大学c语言课件第8章.ppt_第1页
第1页 / 共17页
C华南农业大学c语言课件第8章.ppt_第2页
第2页 / 共17页
C华南农业大学c语言课件第8章.ppt_第3页
第3页 / 共17页
点击查看更多>>
资源描述
本章主要内容1 掌握无参宏定义和带参宏定义的方法 2 掌握文件包含命令的形式和文件包含的实现过程 3 掌握条件编译命令的形式及嵌套 第8章编译预处理 C提供的预处理功能主要有以下三种 宏定义文件包含条件编译所有的预处理语句均以 开头 占用一个单独的书写行 语句的结尾不用分号 结束 8 1宏定义 8 1 1无参数宏定义无参数宏定义的一般形式 define标识符字符串 常量或代码串 例 definePI3 1415926作用 用PI来代表 3 1415926 以一个简单的名字代替长的符号串 称这个标识符为 宏名 在编译时将宏名替换成字符串的过程称为 宏展开 define是宏定义命令 例 从键盘输入字符 个数不多于100 欲统计输入字符中英文字母的个数 注 输入字符 时 或输入字符个数多于100时 输入结束 include stdio h defineMAX100main intn count 0 charch for n 0 n a 无参宏定义说明 为了使宏名和变量名相区别 通常宏名用大写字母表示 符号常量不仅可以定义常数 也可以定义字符 字符串 说明符号 如 defineENDSTRING 0 如果程序中用双引号括住的字符串内包含与符号常量有相同的名字 预编译时并不进行宏替换 如 defineBOOK TheRedandTheBlack main printf ns BOOK 运行结果 TheRedandTheBlack如果将程序改为 defineBOOK TheRedandTheBlack main printf ns BOOK 运行结果 BOOK 无参宏定义说明 续 宏定义语句的末尾不必加分号 例如 defineMAXIMUM20 错误 if max MAXIMUM break 经过宏展开后 其中的if语句变为 if max 20 break 显然 上述if语句存在语法错误 在字符串中若出现运算符 通常需在合适的位置加括号 例如 defineS 3 4 可以用 undef命令取消宏定义 一般形式 undef标识符 8 1 2带参宏定义带参宏定义的一般形式 define标识符 形参表 字符串其中 形参表是由一个或多个形参组成 带参宏调用的一般形式 宏名 实参表 例 编写一个程序 求3个数中的最大数 要求用带参数的宏实现 include defineMAX1 a b a b a b defineMAX2 a b c MAX1 a b c MAX1 a b c main inta 23 printf MAX d n MAX2 13 5 4 a 带参数的宏与函数有本质上的区别 函数在定义和调用中所使用的形参和实参都受数据类型的限制 而带参数宏的形参和实参可以是任意数据类型 函数有一定的数据类型 且数据类型是不变的 而带参数的宏一般是一个运算表达式 它没有固定的数据类型 函数调用时 先计算实参表达式的值 然后带入形参 而宏定义展开时 只是替换 函数调用是在程序运行时处理的 将分配临时的存储单元 而宏扩展是在编译时进行的 展开时即不分配内存单元 不传递值 也没有 返回值 的概念 使用宏次数多时 宏展开后源程序增长 而函数调用不使源程序变长 使用带参数的宏 应注意 1 对于宏定义的形参要根据需要加上圆括号 以免发生运算错误 defineMULTI x x x a 15 b 3 p MULTI a b 10 经过预编译 该赋值语句变为 p a b a b 10 如果定义中没有使用相应的括号 定义为 defineMULTI x x x 预编译后的赋值语句变为 p a b a b 10 显然与原题意不符 2 宏名与括号之间不能有空格 define S r PI r r 错 8 2文件包含 文件包含也是一种预处理语句 它的作用是使一个源程序文件将另一个源程序文件的全部包含进来 一般形式为 include或 include 文件名 文件包含 示意图 file1 cfile2 cfile1 c包含 include file2 c BABA a b c 8 3条件编译 8 3 1条件编译命令的形式常用的有三种形式 形式一 ifdef宏名程序段1 else程序段2 endif 或者 ifdef宏名程序段 endif 8 3 1条件编译命令的形式 续 形式二 ifndef宏名程序段1 else程序段2 endif其中 ifndef语句的功能与 ifdef相反 如果宏名未定义则编译程序段1 否则编译程序2 或者 ifndef宏名程序段 endif 8 3 1条件编译命令的形式 续 形式三 if常数表达式程序段1 else程序段2 endif功能 首先计算 常数表达式 的值 如果为真 非零 就编译 程序段1 否则编译 程序段2 如果没有 else部分 则当 常数表达式 的值为0时 直接跳过 endif 或者 if常数表达式程序段 endif 例 阅读程序 includemain ifNULLprintf NULLisnon zerovalue n elseprintf NULLiszerovalue n endif 运行结果 NULLiszerovalue 8 3 2条件编译命令的嵌套 条件编译可以嵌套使用 如 if表达式1程序段1 else if表达式2程序段2 else程序段3 endif endif
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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