资源描述:
《第13 章 编译预处理和动态存储分配.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第13章编译预处理和动态存储分配Top77不带参数的宏替换Top78带参数的宏替换Top79对编译预处理的一些说明Top80动态存储分配Top77不带参数的宏替换考点一般定义形式为:#define宏名字符串说明:宏定义与一般变量定义含义不同,它只作字符替换,并不分配内存空间,也不能认为是赋值。“#”表示这是一条预处理命令define为宏定义命令宏名为一个合法的标识符字符串可以是常数、表达式或语句,或是多条语句2.宏展开:预编译时,用宏体替换宏名---不作语法检查3.引号中的内容与宏名相同也不置换例#definePI3.14
2、159printf(“2*PI=%f”,PI*2);宏展开:printf(“2*PI=%f”,3.14159*2);4.宏定义可嵌套,不能递归例#defineMAXMAX+10()5.宏定义中使用必要的括号()例#defineWIDTH80#defineLENGTHWIDTH+40var=LENGTH*2;宏展开:var=80+40*2;例#defineWIDTH80#defineLENGTHWIDTH+40var=LENGTH*2;宏展开:var=80+40*2;()()Top78不带参数的宏替换真题分析(20
3、06年9月)若要求定义具有10个int型元素的一维数组a,则下列定义语句中错误的是——A、#defineN10inta[N];B、#definen5inta[2*n];C、inta[5+5];D、intn=10,a[n];DTop78不带参数的宏替换真题分析(2005-9)下列程序的功能是:给r输入数据后计算半径为r的圆面积s。程序在编译时出错,出错的原因是——A、注释语句书写位置错误B、存放圆半径的变量r不应该定义为整型C、输出语句中格式描述符非法D、计算圆面积的赋值语句中使用了非法变量Dmain()/*Beginnin
4、g*/{intr;floats;scanf("%d",&r);s=*π*r*r;printf("s=%f",s);}Top78不带参数的宏替换真题分析(2005-4)下列程序的输出结果是——A、192B、29C、25D、编译出错#defineP3F(intx){return(P*x*x);}main(){printf("%d",F(3+5));}ATop78带参数的宏替换带参数宏定义一般形式:#define宏名(参数表)宏体例#defineS(r)PI*r*r相当于定义了不带参宏S,代表字符串“(r)PI*r*r”
5、宏展开:形参用实参换,其它字符保留宏体及各形参外一般应加括号()例#defineS(a,b)a*b………..area=S(3,2);宏展开:area=3*2;不能加空格例#definePOWER(x)x*xx=4;y=6;z=POWER(x+y);宏展开:z=x+y*x+y;一般写成:#definePOWER(x)((x)*(x))宏展开:z=((x+y)*(x+y));#defineMAX(x,y)(x)>(y)?(x):(y)…….main(){inta,b,c,d,t;…….t=MAX(a+b,c+d);……}宏展开
6、: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);………}例用宏定义和函数实现同样的功能<>Top78带参数的宏替换带参的宏与函数区别带参宏函数处理过程不分配内存简单的字符置换分配内存先求实参值,再代入形参处理时间编译时程序运行时参数类型无类型问题定义实参,形参类型程序长度变长不变运行速度不占运行时间调用和返回占时间<>Top78带参数的宏替换Top78带参数的宏替换真题分析
7、(2007年4月)有一个名为init.txt的文件,内容如下#defineHDY(A,B)A/B#definePRINT(Y)printf(“y=%d”,Y)有以下程序#include“stdio.h”#include“init.txt”main(){inta=1,b=2,c=3,d=4,k;k=HDY(a+c,b+d);PRINT(k);}下面针对该程序的叙述正确的是:编译出错A.运行出错D.运行结果为y=0C.运行结果为y=6B.DTop78带参数的宏替换真题分析(2005年9月)有下列程序,程序运行后的输出结果是
8、————A、64,28B、4,4C、4,3D、64,64#definef(x)=(x*x)main(){inti1,i2;i1=f(8)/f(4);i2=f(4+4)/f(2+2);prinft("%d,%d",i1,i2);}CTop78带参数的宏替换真题分析(2005年4月)下列叙述中正确的是—