第9章编译预处理

第9章编译预处理

ID:44963039

大小:178.00 KB

页数:36页

时间:2019-11-06

第9章编译预处理_第1页
第9章编译预处理_第2页
第9章编译预处理_第3页
第9章编译预处理_第4页
第9章编译预处理_第5页
资源描述:

《第9章编译预处理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第9章预处理命令教学内容9.1宏定义9.2“文件包含”处理9.3条件编译教学目的使学生了解预处理的概念及特点、掌握宏的定义及使用、文件包含的使用及效果以及条件编译的方法及机理。重点和难点1、预处理的概念及特点2、有参宏与无参宏的定义及使用3、文件包含的使用4、条件编译的方法课时:2教学方法:多媒体演示教学过程作用:对源程序编译之前做一些处理预处理功能主要有以下三种:1.宏定义#define2.文件包含#include3.条件编译#if--#else--#endif等格式:“#”开头占单独书写行语句尾不加分号编译预处理命令行以下说法中正确的是()。A)#define和pri

2、ntf都是C语句B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C语句以下正确的描述为()。A)每个C语言程序必须在开头用预处理命令#includeB)预处理命令必须位于C源程序的首部C)在C语言中预处理命令都以“#”开头D)C语言的预处理命令只能实现宏定义和条件编译的功能9.1宏定义9.1.1不带参数的宏定义一般形式:#define宏名宏体例:#definePI3.1415926功能:用指定标识符(宏名)代替字符序列(宏体)宏展开:预编译时,用宏体替换宏名---不作语法检

3、查#definePI3.L4l59----正常替换作用域:从定义命令到文件结束#undef可终止宏名作用域格式:#undef宏名#defineg8.8main(){g的有效范围…}#undefgf1(){…}说明:(1)宏名一般习惯用大写字母表示。(2)在进行宏定义时,可以引用已定义的宏名,可以层层置换。#defineR3.0#definePI3.1415926#defineL2*PI*R#defineSPI*R*Rmain(){printf("L=%fs=%f",L,S);}#definePT5.5#defineS(x)PT*x*x#include

4、h>main(){inta=1,b=2;printf("%4.1f",S(a+b));}9.1.2带参数的宏定义一般形式为#define宏名(参数表)字符串如:#defines(a,b)a*barea=s(3,2);说明:(1)宏展开:形参用实参换,其它字符保留(2)宏体及各形参外一般应加括号()(3)在宏定义时,在宏名与带参数的括弧之间不应加空格。#defines(r)PI*r*r例#definePOWER(x)x*xx=4;y=6;z=POWER(x+y);宏展开:z=x+y*x+y;一般写成:#definePOWER(x)((x)*(x))宏展开:z=((x+y

5、)*(x+y));#defineMAX(x,y)(x)>(y)?(x):(y)…….main(){inta,b,c,d,t;…….t=MAX(a+b,c+d);……}宏展开:t=(a+b)>(c+d)?(a+b):(c+d);intmax(intx,inty){return(x>y?x:y);}main(){inta,b,c,d,t;…….t=max(a+b,c+d);………}例用宏定义和函数实现同样的功能带参宏函数处理过程不分配内存简单的字符置换分配内存先求实参值,再代入形参处理时间编译时程序运行时参数类型无类型问题定义实参,形参类型程序长度变长不变运行速度不占运行时间

6、调用和返回占时间带参的宏与函数区别#definef(x)x*x#includemain(){inta=6,b=2,c;c=f(a)/f(b);printf("%d",c);}#defineN3#defineY(n)((N+1)*n)则执行语句:z=2*(N+Y(5+1));后,z的值为()。#defineADD(x)x+xmain(){intm=1,n=2,k=3;intsum=ADD(m+n)*k;printf("sum=%d",sum);}#include#defineMIN(x,y)(x)<(y)?(x):(y)main(){

7、inti,j,k;i=10;j=15;k=10*MIN(i,j);printf("%d",k);}#defineSUB(X,Y)(X)*Ymain(){inta=3,b=4;printf(“%d”,SUB(a,b));}#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d",a);}#defineM(x,y,z)x*y+zmain(){inta=1,b=2,c=3;printf("%d",M(a+b,b+c,c+a));}#

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。