C语言-条件编译.ppt

上传人:max****ui 文档编号:6332150 上传时间:2020-02-23 格式:PPT 页数:25 大小:439.50KB
返回 下载 相关 举报
C语言-条件编译.ppt_第1页
第1页 / 共25页
C语言-条件编译.ppt_第2页
第2页 / 共25页
C语言-条件编译.ppt_第3页
第3页 / 共25页
点击查看更多>>
资源描述
第九章 条件编译 回顾 指针是一个变量 它存储另一个对象的内存地址指针的声明由基本类型 星号 和变量名组成为指针赋值 赋值运算符右侧必须是一个地址 如果是普通变量需要在前面加一个取地址运算符 如果是另一个指针变量或者是一个数组 不需要加 运算符运算符 用于返回指针指向的内存地址中存储的值 指针的算术运算的含义是指针的移动 将指针执行加上或者减去一个整数值n的运算相当于指针向前或向后移动n个数据单元指针可以执行比较相等的运算 用来判断两个指针是否指向同一个变量指向数组的指针 存储的是数组中元素的地址 目标 理解以 号开头编译预处理 理解宏定义 理解条件编译 预处理命令是由ANSIC统一规定的 但是它不是C语言本身的组成部分 不能直接对它们进行编译 必须在对程序进行通常的编译之前 先对程序中这些特殊的命令进行 预处理 即根据预处理命令对程序作相应的处理 经过预处理后程序不再包括预处理命令了 最后再由编译程序对预处理后的源程序进行通常的编译处理 得到可供执行的目标代码 现在使用的许多C编译系统都包括了预处理 编译和连接等部分 在进行编译时一气呵成 因此不少用户误认为预处理命令是C语言的一部分 甚至以为它们是C语句 这是不对的 C提供的预处理功能主要有以下三种 1 宏定义2 文件包含3 条件编译为了与一般C语句相区别 这些命令以符号 开头 9 1宏定义 9 1宏定义 9 1 1不带参数的宏定义用一个指定的标识符 即名字 来代表一个字符串 它的一般形式为 define标识符字符串例 definePI3 1415926把这个标识符 名字 称为 宏名 在预编译时将宏名替换成字符串的过程称为 宏展开 define是宏定义命令 例9 1 9 1宏定义 注意点 1 在预定义中已经用到的符号不能在函数中再定义 如 doubles2 s3 a b x y 2 在不带参数的宏定义中像a b x y必须先预定义后才能在后面的宏定义中使用 即宏定义可以嵌套 宏定义的字符串中可以使用已定义的宏名 在宏展开时由预处理程序层层代换 例如 definea1 2 defineb2 4 defines2a b 3 在宏定义中 符号常量一般大写 本例中有大写也有小写 4 编译器在编译之前把程序中出现的一切宏用其对应的表达式字符串来替代 而不是计算表达式的值后才替代 即宏定义是用宏名表示的一个字符串 在宏展开时又以该字符串取代宏 这只是一种简单的代换 字符串可以含有任何字符 可以是常量 也可以是表达式 预处理程序对它不作任何检查 如有错误 只能在编译已被宏展开后的源程序时才发现 9 1宏定义 5 在 define语句中 宏与字符串之间用空格隔开 在表达式末尾没有分号 不然分号也会被认为是表达式的一部分而出现在程序中宏出现的位置 6 如果在双引号中的字符串中出现宏名 则此字符串中的和宏名相同的字符是普通字符不会被替换 例如 printf 矩形的面积s2 lf n s2 该语句中的第1个s2就不会被替换 另外对 输出格式 作宏定义 可以减少书写麻烦 但可读性差 例如 include definePprintf defineD d n defineF f n voidmain inta 1 c 2 floatb 1 2 d 2 4 P DF a b P DF c d 9 2带参数的宏定义 语言允许宏带有参数 在宏定义中的参数称为形式参数 在宏调用中的参数称为实际参数 对带参数的宏 在调用中 不仅要宏展开 而且要用实参去代换形参 带参宏定义的一般形式为 define宏名 形参表 字符串在字符串中含有各个形参 带参数的宏调用的一般形式为 宏名 实参表 例如 defineS2 a b a b 宏定义 printf 矩形的面积S2 lf n S2 1 2 2 4 宏调用 在宏调用时 用实参1 2和2 4去代替形参a b 经预处理宏展开后的语句为 printf 矩形的面积S2 lf n 1 2 2 4 例9 2 对于带参数的宏定义有以下问题需要说明 1 带参宏定义中 宏名和形参表之间不能有空格出现 例如 defineS2 a b a b 写为 defineS2 a b a b 将被认为是无参宏定义 宏名S2代表字符串 a b a b 宏展开时 宏调用语句成为 s20 a b a b a b 这显然是错误的 2 在带参宏定义中 形式参数不分配内存单元 因此不必作类型定义 这与函数调用中的情况是不同的 在函数调用中 形参和实参是两个不同的量 各有自己的作用域 调用时要把实参值传递给形参 进行 值传递 而在带参宏中 只是符号代换 不存在值传递的问题 3 在宏定义中的形参是标识符 而宏调用中的实参可以是表达式 宏定义还可以解除 解除宏定义的一般形式为 undef宏名其中 undef是关键字 宏名是在此前定义过的 功能是解除前面已定义的宏 使之不再起作用 也就是说宏有它的作用域 9 2文件包含 文件包含是C预处理程序的另一个重要功能 文件包含命令行的一般形式为 include或 include 文件名 在前面我们已多次用此命令包含过库函数的头文件 例如 include include在VisualC 6 0中 系统含有的头文件用两种形式都可以 自定义的头文件用 include形式时第一次编译可能无法通过 如果不能通过请修改为 include 文件名 形式 文件包含命令的功能是把指定的文件插入到该命令行位置取代该命令行 从而把指定的文件和当前的源程序文件连成一个源文件 文件包含命令的几点说明如下 1 一个 include命令只能指定一个被包含文件 若有多个文件要包含 则需用多个 include命令 2 被包含文件的扩展名可以不是 h的文件 3 文件包含允许嵌套 即在一个被包含的文件中又可以包含另一个文件 例9 3 9 3条件编译 预处理程序提供了条件编译的功能 可以按不同的条件去编译不同的程序部分 因而产生不同的目标代码文件 这对于程序的移植和调试是很有用的 条件编译有三种形式 1 第一种形式 ifdef标识符程序段1 else程序段2 endif它的功能是 如果标识符已被 define命令定义过则对程序段1进行编译 否则对程序段2进行编译 如果没有程序段2 它为空 本格式中的 else可以没有 即可以写为 ifdef标识符程序段 endif 例9 4 例9 5 总结 1 预处理功能是 语言特有的功能 它是在对源程序正式编译前由预处理程序自动完成的 2 宏定义是用一个标识符来表示一个字符串 这个字符串可以是常量 变量或表达式 在宏展开中将用该字符串代换宏名 宏定义可以带有参数 宏调用时是以实参代换形参 而不是 值传送 为了避免宏代换时发生错误 宏定义中的字符串应加括号 即字符串中出现的形式参数两边应加括号 3 文件包含可用来把多个源文件连接成一个源文件进行编译 结果将生成一个目标文件 4 条件编译允许只编译源程序中满足条件的程序段 使生成的目标程序较短 从而减少了内存的开销 并提高了程序的效率
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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