第11章 编译预处理.ppt
《第11章 编译预处理.ppt》由会员分享,可在线阅读,更多相关《第11章 编译预处理.ppt(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第11 11章章 编译预处理编译预处理本章学习要点说明本章学习要点说明掌握掌握#include#include、#define#define、#if#if、#ifdefifdef、#elseelse、#ifndefifndef、#endifendif等命令的用法等命令的用法掌握宏定义和宏替换的一般方法掌握宏定义和宏替换的一般方法掌握文件包含的处理方法掌握文件包含的处理方法了解条件编译的作用和实现方法了解条件编译的作用和实现方法 2作用:作用:对源程序编译之前做一些处理对源程序编译之前做一些处理,生成扩展生成扩展C C源程序源程序。种类种类宏定义宏定义#define#define文件包含文件包
2、含#include#include条件编译条件编译#if-#else-#if-#else-#endifendif等等格式:格式:“#”#”开头开头占单独书写行占单独书写行语句尾不加分号语句尾不加分号 311.1 11.1 宏定义宏定义不带参数的宏定义不带参数的宏定义#define SIZE 10#define INT_STR%dvoid main()int aSIZESIZE,i;for(i=0;i=0;i-)printf(INT_STR,ai);编程输入的源程序编程输入的源程序void main()int a10,i;for(i=0;i=0;i-)printf(%d,ai);编译预处理后的新
3、源程序编译预处理后的新源程序 4如如 if(x=YES)printf(“correct!n”);else if(x=NO)printf(“error!n”);展开后:展开后:if(x=1)printf(“correct!n”);else if(x=0)printf(“error!n”);不带参数宏定义不带参数宏定义一般形式:一般形式:#define 宏名宏名 宏体宏体功能功能:用指定标识符用指定标识符(宏名宏名)代替字符序列代替字符序列(宏体宏体)宏展开:预编译时宏展开:预编译时,用宏体替换宏名用宏体替换宏名-不作语法检查不作语法检查如如#define YES 1#define NO 0#de
4、fine PI 3.1415926#define OUT printf(“Hello,World”);定义位置定义位置:任意任意(一般在函数外面一般在函数外面)作用域作用域:从定义命令到文件结束从定义命令到文件结束#undef可可终止宏名作用域终止宏名作用域 格式:格式:#undef 宏名宏名例例#define YES 1 main().#undef YES#define YES 0 max().YES原作用域原作用域YES新作用域新作用域宏定义可嵌套,不能递归宏定义可嵌套,不能递归例例#define MAX MAX+10 ()引号中的内容与宏名相同也不置换引号中的内容与宏名相同也不置换例例#
5、define PI 3.14159 printf(“2*PI=%fn”,PI*2);宏展开:宏展开:printf(“2*PI=%fn”,3.14159*2);宏定义中使用必要的括号宏定义中使用必要的括号()()例例#define WIDTH 80#define LENGTH WIDTH+40 var=LENGTH*2;宏展开:宏展开:var=80+40*2;()()例例#define WIDTH 80#define LENGTH WIDTH+40 var=LENGTH*2;宏展开:宏展开:var=80+40*2;5例例11.1 11.1 不带参数的宏定义举例。不带参数的宏定义举例。#defin
6、e N 4#define N 4#define M N+3#define M N+3void main()void main()int a;int a;a=M*N;a=M*N;printf(Nprintf(N=%d,M=%=%d,M=%dndn,N,M);,N,M);printf(Mprintf(M*N=%*N=%dn,adn,a););#undefundef M M#define M (N+3)#define M (N+3)a=M*N;a=M*N;printf(Nprintf(N=%d,M=%=%d,M=%dn,N,Mdn,N,M););printf(Mprintf(M*N=%*N=%dn,
7、adn,a););6带参数宏定义带参数宏定义l一般形式:一般形式:#define#define 宏名宏名(参数表参数表)宏体宏体例例#define S (r)PI*r*r相当于定义了不带参宏相当于定义了不带参宏S,代表字符串代表字符串“(r)PI*r*r”l宏展开:宏展开:形参用实参换,其它字符保留形参用实参换,其它字符保留l宏体及各形参外一般应加括号宏体及各形参外一般应加括号()()例例#define S(a,b)a*b .area=S(3,2);宏展开宏展开:area=3*2;不能加空格不能加空格例例#define POWER(x)x*x x=4;y=6;z=POWER(x+y);宏展开:
8、宏展开:z=x+y*x+y;一般写成:一般写成:#define POWER(x)(x)*(x)宏展开:宏展开:z=(x+y)*(x+y);7#define MAX(x,y)(x)(y)?(x):(y).main()int a,b,c,d,t;.t=MAX(a+b,c+d);宏展开:宏展开:t=(a+b)(c+d)?(a+b):(c+d);int max(int x,int y)return(xy?x:y);main()int a,b,c,d,t;.t=max(a+b,c+d);例例 用宏定义和函数实现同样的功能用宏定义和函数实现同样的功能 9l带参的宏与函数的区别:带参的宏与函数的区别:带参宏
9、带参宏函数函数处理过程处理过程不分配内存不分配内存简单的字符置换简单的字符置换分配内存分配内存先求实参值先求实参值,再代入形参再代入形参处理时间处理时间编译时编译时程序运行时程序运行时参数类型参数类型无类型问题无类型问题定义实参定义实参,形参类型形参类型程序长度程序长度变长变长不变不变运行速度运行速度不占运行时间不占运行时间调用和返回占时间调用和返回占时间 10例例11-3 11-3 带参数的宏举例。带参数的宏举例。#define#define SQ(ySQ(y)y*y)y*yvoid main()void main()int int a,sqa,sq;printf(inputprintf(i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第11章 编译预处理 11 编译 预处理
限制150内