第5章编译预处理.ppt
《第5章编译预处理.ppt》由会员分享,可在线阅读,更多相关《第5章编译预处理.ppt(18页珍藏版)》请在三一办公上搜索。
1、5.2 宏定义,5.1概述,第五章 编译预处理,4.4 条件编译,5.3 文件包含,4.5 小结,结束,1了解预编译的概念,掌握宏定义的方法。2了解“文件包含”与预处理的应用。3了解条件编译的几种形式。,5.1 概述,5.1 概述(P98)编译预处理概念 编译预处理是指,在进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码 种类宏定义#define文件包含#include条件编译#if _#else_#endif 等格式“#”开头占单独书写行语句尾不加分号,5.2 宏定义,5.2 宏定义(P98)不带参数宏定义 一般形式:#define
2、 宏名 字符串 功能:用指定标识符(宏名)代替字符序列(宏体)定义位置:任意(一般在函数外面)作用域:从定义命令到文件结束#undef 可终止宏名作用域 格式:#undef 宏名 宏展开:预编译时,用宏体替换宏名-不作语法检查 引号中的内容与宏名相同也不置换 宏定义可嵌套,不能递归 宏定义中使用必要的括号(),如:#define YES 1#define NO 0#define PI 3.1415926#define OUT printf(Hello,World);,可缺省,表示宏名定义过或取消宏体,如:#define YES 1#define NO 0 if(x=YES)printf(cor
3、rect!n);else if(x=NO)printf(error!n);展开后:if(x=1)printf(correct!n);else if(x=0)printf(error!n);,例:#define PI 3.14159 printf(2*PI=%fn,PI*2);宏展开:printf(2*PI=%fn,3.14159*2);,例:不能递归#define MAX MAX+10(),例:宏定义可嵌套#define WIDTH 80#define LENGTH WIDTH+40 var=LENGTH*2;宏展开:var=80+40*2;,(),(),5.2 宏定义,【例 5.1】给出下面
4、宏替换的结果#define R 5.0#define FORMAT Area=%fn#define PI 3.14159#define AREA R*R*PI#define PR printf#include main()PR(FORMAT,AREA);PR(FORMAT);,宏替换的结果:#include main()printf(Area=%fn,5.0*5.0*3.14.59);printf(FORMAT);,运行结果:Area=78.539750 FORMAT,5.2 宏定义,带参数宏定义 一般形式:#define 宏名(参数表)宏体 宏展开:形参用实参换,其它字符保留例:#defin
5、e S(a,b)a*b area=S(3,2);宏展开:area=3*2;宏名与左圆括号之间不能留有空格例:#define S(r)PI*r*r 相当于定义了不带参宏 S,代表字符串“(r)PI*r*r”宏体及各形参外一般应加括号(),例:#define POWER(x)x*x x=4;y=6;z=POWER(x+y);宏展开:z=x+y*x+y;一般写成:#define POWER(x)(x)*(x)宏展开:z=(x+y)*(x+y);,5.2 宏定义,【例 5.2】用带参数宏定义求两个数的最大值#define MAX(x,y)(x)(y)?(x):(y)#include main()int
6、 a,b,c;float x,y,z;scanf(%d%d,宏展开:c=(a)(b)?(a):(b),宏展开:z=(x)(y)?(x):(y),运行程序,输入:3 87 12.5 23.8 输出结果为:c=87 z=23.799999,5.2 宏定义,带参的宏与函数区别,5.2 宏定义,在定义和使用宏调用时应该注意的问题 参数多次计算。运算符优先级引起的问题。宏定义中的字符串相连。在定义无参宏时,如果“语言符号字符串”是一个常量,则相应的“宏名”就是一个符号常量。#define EOF-1/*文件尾*/#define NULL 0/*空指针*/使用宏定义的优点 可提高源程序的可维护性 可提高源
7、程序的可移植性 减少源程序中重复书写字符串的工作量,定义:#define min(A,B)(A)(B)?(A):(B)调用1:z=min(x+y,x*y);展开:z=(x+y)(x*y)?(x+y):(x*y);调用2:z=min(n+,m+);展开:z=(n+)(m+)?(n+):(m+);两个调用都出现参数表达式计算多次的问题,可能会成为程序中的隐含错误。,定义:#define square(x)x*x 调用:z=square(x+y);展开:z=x+y*x+y;算符“*”的优先级高于“+”的优先级,接开表达式中,将首先计算 y*x,与题意不符。应加括号该定义为:#define squar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 预处理

链接地址:https://www.31ppt.com/p-5335187.html