[计算机软件及应用]预处理 c语言 第12章.pptVIP

  • 0
  • 0
  • 约3.8千字
  • 约 41页
  • 2018-03-09 发布于浙江
  • 举报

[计算机软件及应用]预处理 c语言 第12章.ppt

[计算机软件及应用]预处理 c语言 第12章

宏定义:#define、#undef。 文件包含:#include。 条件编译:#if、#ifdef、#else、#elif、#endif。 其他:#line、#error、#pragma。 不带参数的宏定义只是将一个字符串定义为一个 标识符,字符串中不含参数。 程序设计基础 第 12章 预处理 宏定义 文件包含 条件编译 解决任务12.1的程序 编程实例 本章的基本内容是: 预处理: 是指在编译之前对源程序进行的某些预处理工作, 如去掉注释、变换格式、文件链接等,然后再对 预处理之后的源程序进行编译。从功能上讲,预 处理扩展了程序设计的环境,简化了程序的开发 过程,提高了程序的可读性和可移植性。 在C程序中,以“#”开头、以换行符结尾的命令行称 为预处理指令,C语言的预处理指令包括: 【任务12.1】石头、剪子、布 【问题】石头、剪子、布是孩子们中很流行的一个游戏,游戏规则是:用手表示石头、剪子或布,握紧拳头表示石头,伸出食指和中指表示剪子,五指伸出表示布;石头会硌坏剪子、剪子能剪断布、布能包住石头。设计一个游戏程序,实现游戏者和计算机之间的游戏,要求能够重复游戏,直到游戏者选择结束,在此过程中,还能够阅读游戏指南、查看当前战况等。 【想法】设计一个枚举类型表示{石头,剪子,布}, 计算机随机选择一个,然后游戏者从键盘输入一个 选择,然后给出游戏结果。由于需要查看战况,因 此,需要保存游 戏次数和每次的结果。 【算法】 【任务12.1】石头、剪子、布 12.1 宏定义 宏定义:就是定义一个简单的标识符来代替另一个比较复杂的字符串,这个标识符称为宏或宏名,编译预处理将源程序中的所有宏名都用宏定义中的字符串进行替换,称为宏替换。 C语言的宏定义分为两种: 不带参数的:用于定义符号常量 带参数的:用于实现简单的函数功能 宏定义特点:不占用运行时间,提高程序的执行效率。 12.1.1 不带参数的宏定义 【语法】 宏体 宏名 #define 标识符 字符串 以回车而不是分号结尾 其中,标识符称为宏名;字符串是宏的具体内容, 称为宏体。 【语义】在预处理时将源程序中出现的所有与宏名 相同的标识符替换为字符串(即宏替换),宏替换 后形成新的源程序。例如,对于如下源程序: 12.1.1 不带参数的宏定义 宏替换后得到如下新的源程序: 12.1.1 不带参数的宏定义 宏替换仅仅是将源程序中与宏名相同的标识符替 换为宏体,不包括与宏名相同的字符串常量,不 对宏体进行任何处理。例如,如下语句: 12.1.1 不带参数的宏定义 宏替换后的语句为: 需要强调的是,预处理不对宏定义进行词法检查 和语法检查,因此,编程人员要保证宏定义的正 确性。如果宏定义出现错误,宏替换也照常进行, 从而导致在编译阶段产生语法错误。例如,如下 源程序: 12.1.1 不带参数的宏定义 宏替换会将分号作为宏体的一部分进行替换,得到 的源程序如下: 12.1.2 带参数的宏定义 带参数的宏定义具有函数调用的形式和功能,因此 也称为类函数宏。 【语法】 宏名 #define 标识符(参数列表) 字符串 以回车而不是分号结尾 宏体 其中,标识符表示宏名;参数列表由逗号分隔的一个 或多个宏参数组成,并且参数只有参数名没有数据类 型符;字符串是宏体,通常会应用宏的参数。注意标 识符和左括号之间没有空格,否则会将空格后面的所 有字符解释为宏体,就变成了不带参数的宏。 12.1.2 带参数的宏定义 【语义】在宏替换时,首先将宏体中的宏参数替换成 实参,形成实际的宏体,再用这个宏体替换源程序中 与宏名相同的标识符。 带参数的宏替换(也称宏调用)相当于函数调用,宏 调用中的参数相当于实参,宏定义中的参数相当于形 参,但参数结合的过程不是值传递,而是简单地将形 参替换为实参。例如,有如下源程序: 宏替换的过程如图12.1所示,宏替换后的语句如下: 12.1.2 带参数的宏定义 可是,这个宏定义是有问题的,例如,对于如下语句: 宏替换的过程如图12.2所示,宏替换的结果是: 12.1.2 带参数的宏定义 但是,a + b的平方应该是(a + b) * (a + b),因此, 正确的宏定义应该是: 正确的宏替换如下: 12.1.3 宏定义的终止

文档评论(0)

1亿VIP精品文档

相关文档