C程序设计教案第八章PPT课件_第1页
C程序设计教案第八章PPT课件_第2页
C程序设计教案第八章PPT课件_第3页
C程序设计教案第八章PPT课件_第4页
C程序设计教案第八章PPT课件_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章编译预处理 编译预处理不是C语言的组成部分 而是C编译系统的一个部分 编译系统先对编译预处理命令进行处理 然后将处理结果和C语言源程序进行编译 得到目标代码 8 1宏定义8 2 文件包含 处理8 3条件编译返回 8 1宏定义 1 7 不带参数的宏定义其一般形式为 define标识符字符串其中 define为宏定义命令 标识符为宏名 通常用大写字母表示 以便于与变量区别 字符串可以是常数 表达式 格式串等 例如 definePI3 1415926main floatl s r v printf inputradius scanf f 8 1宏定义 2 7 使用宏定义的优点可提高源程序的可维护性 可提高源程序的可移植性 可通过改变宏定义改变程序中对应的所有位置内容 减少源程序中重复书写字符串的工作量 说明1 宏名一般用大写字母表示 以便与变量名区别 但非硬性规定 2 宏定义不是C语言语句 不带分号 3 宏定义的编译预处理只是简单代换 不作语法检查 4 define命令一般位于函数之外 其有效范围为定义命令到源文件结束的位置 5 可以用 undef终止宏定义的作用域 6 在进行宏定义时 可引用已定义的宏名 7 宏定义的编译预处理对双引号内的字符串无效 8 1宏定义 3 7 undef的例子 defineG9 8main undefGf 嵌套的例子 defineR3 0 definePI3 1415926 defineL2 PI R defineSPI R Rmain printf L f nS f n L S 8 1宏定义 4 7 符号常量在定义无参宏时 如果字符串是一个常量 则相应的 宏名 就是一个符号常量 恰当命名的符号常量 除具有宏定义的上述优点外 还能表达出它所代表常量的实际含义 从而增强程序的可读性 defineEOF 1 文件尾 defineNULL0 空指针 defineMIN1 极小值 defineMAX31 极大值 defineSTEP2 步长 8 1宏定义 5 7 带参数的宏定义其一般形式为 define宏名 参数表 字符串其编译预处理的过程是 将程序中带参数的宏名用字符串代替 将字符串中的形式参数用宏名的实际参数代替 例如 defineS a b a b area S 3 2 其编译预处理过程为 area S 3 2 area a b area 3 2 8 1宏定义 6 7 例如 definePI3 1415926 defineS r PI r rmain floata area a 3 6 area S a printf r f narea f n a area 其中编译预处理过程为 arae S a area PI r r area 3 1415926 a a 8 1宏定义 7 7 说明 1 定义有参宏时 宏名与左圆括号之间不能留有空格 否则 编译系统将空格以后的所有字符均作为替代字符串 而将该宏视为无参宏 2 有参宏的展开 只是将实参作为字符串 简单地置换形参字符串 而不做任何语法检查 在定义有参宏时 在所有形参外和整个字符串外 均加一对圆括号 3 虽然有参宏与有参函数确实有相似之处 但不同之处更多 调用有参函数时 是先求出实参的值 然后再复制一份给形参 而展开有参宏时 只是将实参简单地置换形参 在有参函数中 形参是有类型的 所以要求实参的类型与其一致 而在有参宏中 形参是没有类型信息的 因此用于置换的实参 什么类型都可以 有时 可利用有参宏的这一特性 实现通用函数功能 使用有参函数 无论调用多少次 都不会使目标程序变长 但每次调用都要占用系统时间进行调用现场保护和现场恢复 而使用有参宏 由于宏展开是在编译时进行的 所以不占运行时间 但是每引用1次 都会使目标程序增大1次 返回 8 2 文件包含 处理 1 3 所谓 文件包含 处理是指一个源文件可以将另外一个源文件的全部内容包含进来 一般形式 include 文件名 或 include两种格式的区别 1 使用双引号 系统首先到当前目录下查找被包含文件 如果没找到 再到系统指定的 包含文件目录 由用户在配置环境时设置 去查找 2 使用尖括号 直接到系统指定的 包含文件目录 去查找 一般地说 使用双引号比较保险 8 2 文件包含 处理 2 3 文件包含的优点一个大程序 通常分为多个模块 并由多个程序员分别编程 有了文件包含处理功能 就可以将多个模块共用的数据 如符号常量和数据结构 或函数 集中到一个单独的文件中 这样 凡是要使用其中数据或调用其中函数的程序员 只要使用文件包含处理功能 将所需文件包含进来即可 不必再重复定义它们 从而减少重复劳动 例子 有文件A有文件 include A B编译预处理后的文件为AB 8 2 文件包含 处理 3 3 说明 1 常用在文件头部的被包含文件 称为 标题文件 或 头部文件 常以 h head 作为后缀 简称头文件 在头文件中 除可包含宏定义外 还可包含外部变量定义 结构类型定义等 在C语言中 大量的库函数的函数说明分别在不同的头文件中进行 例如 stdio h math h string h等等 通常要用文件包含处理所用库函数对应的头文件 以便对要调用的库函数进行说明 2 一个 include命令只能处理一个要包含的文件 如果要包含n个文件 则要用n条包含命令 3 文件包含可以嵌套 即被包含文件中又包含另一个文件 但要注意包含的顺序 4 被包含的文件名如果是用双引号 先查找当前目录 如没有 再查找指定目录 如果是用尖括号 直接查找指定目录 返回 8 3条件编译 1 3 条件编译可有效地提高程序的可移植性 并广泛地应用在商业软件中 为一个程序提供各种不同的版本 条件编译的几种形式 ifdef标识符程序段1 else程序段2 endif或 ifdef标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论