C++第9章预处理

C++第9章预处理

ID:43300331

大小:203.50 KB

页数:19页

时间:2019-10-08

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

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

1、编译预处理第9章#define#include#ifdef19.1编译预处理命令1.什么是编译预处理?编译预处理是指C编译系统在对源程序进行编译之前,先对其进行一些预加工。例如:把#include命令指定的头文件嵌入到源程序中来;把#define命令定义的标识符替换为字符串等。22.编译预处理命令C语言提供3种预处理命令:宏定义:#define文件包含:#include条件编译:#ifdef预处理命令与普通语句的区别:以“#”开头,行末不加分号。例如:#definePI3.14159#include39.2宏定义什么是宏?宏是指用一个简单名字

2、代替一个比较复杂的字符串。(宏观的名)9.2.1无参宏定义定义形式:#define宏名字符串例如:#definePI3.1416宏替换(宏展开):编译预处理时,编译系统用字符串3.1416替换程序中的宏名PI。4[例9.1]计算圆的周长、面积和体积。#definePI3.1416//宏定义命令voidmain(){floatr,L,s,v;printf("inputr:");scanf("%f",&r);L=2*PI*r;//宏替换后为L=2*3.1416*r;s=PI*r*r;v=4.0/3.0*PI*r*r*r;printf("L=%fs=%fv=

3、%f",L,s,v);}5几点说明:①宏名与字符串之间要用空格分开,例如:#definePI3.1416;宏名使用大写字母以便与变量名相区别,宏不分配内存。②使用宏定义命令的优点:便于书写和修改,增强程序的通用性和可移植性。例如,要将PI改为3.1415926,只要把宏定义命令改为#definePI3.1415926即可。又如,#defineN106inta[N];要修改数组的大小,只要修改宏定义命令即可:#defineN100③编译预处理时只作替换,不作语法检查。例如:#definePI3.14159其中数字1写成了小写字母l,预处理时照样替换成小写字母

4、l,所以要认真检查。7④宏名的有效范围:从定义位置开始到程序结束。用#undef命令可以终止宏定义的作用域。⑤宏定义可嵌套。⑥字符串内与宏名相同的字符不替换。#defineG9.8voidmain(){…}#undefGintf1(){…}的有效范围G8[补充例题1]宏定义的嵌套。#include#defineR10#definePI3.1416#defineSPI*R*R//宏定义嵌套voidmain(){printf("S=%f",S);}字符串内的字符S不替换第1次替换:PI*R*R第2次替换:3.1416*10*1092R=1.6

5、01.下列程序段输出结果是_________。#defineR0.8…printf("2R=%.2f",2*R);…课堂练习109.2.2带参数的宏定义定义形式:#define宏名(形参表)宏体如:#definePI3.1416#defineS(r)PI*r*r//S是带参数的宏…area=S(3);在编译预处理时,对S(3)进行替换:第1步用宏体替换宏名:area=PI*r*r;第2步用实参替换形参:area=3.1416*3*3;11[例9.4]带参数的宏定义。#include#defineADD(x,y)x+yvoidmain(){in

6、ta=5,b=6,s;s=ADD(1,2);printf("s=%d",s);s=ADD(a-1,b+1);printf("s=%d",s);}第1步替换:s=x+y;第2步替换:s=1+2;第1步替换:s=x+y;第2步替换:s=a-1+b+1;12使用带参数宏定义要注意以下几点:①宏名与括号之间不能留空格。如:#defineS(r)PI*r*r编译系统认为S是不带参数的宏名,S代表字符串(r)PI*r*r②为了避免宏替换后优先级出错,可以在宏体中加上圆括号。例如:#defineS(x)x*xinta=2,z;z=S(a+1);第1步替换:z=x*x

7、;第2步替换:z=a+1*a+1;出错13解决方法:给宏体中的参数加括号:#defineS(x)(x)*(x)inta=2,z;z=S(a+1);第1步替换:z=(x)*(x);第2步替换:z=(a+1)*(a+1);正确14函数带参数的宏①将实参的值传给形参①用宏体替换宏名,用实参替换形参②实参与形参一一对应、类型一致②宏名及形参只是一种符号,无类型③占用程序运行时间③占用编译时间由以上例题可以看出,用带参数的宏可以实现一些简单运算,这一点与函数有相似之处,但二者有着本质区别:15222.下列程序段输出结果是______。#defineM(x)x*(x+1)

8、…inta=10;printf("%d

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

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

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