C语言课件第9章预处理

C语言课件第9章预处理

ID:44211573

大小:206.50 KB

页数:22页

时间:2019-10-19

C语言课件第9章预处理_第1页
C语言课件第9章预处理_第2页
C语言课件第9章预处理_第3页
C语言课件第9章预处理_第4页
C语言课件第9章预处理_第5页
资源描述:

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

1、第9章:编译预处理命令预处理命令:预处理命令不是C的组成部分,为了扩充C的功能C提供了预处理功能,预处理命令不能直接编译,要先编译,再和其源程序一起编译,执行过程:预编译处理与源程序一同编译生成执行文件系统角度预编译命令与源程序一同编译生成执行文件用户角度第9章:编译预处理命令C提供的预处理功能有一下三种:1、宏定义2、文件包含全部是以#开头的命令3、条件编译9.1宏定义9.1.1不带参数的宏定义格式:#define标识符字符串例如:#definePI3.1415926作用:指定用标识符PI来替代字符串

2、“3.1415926”在编译时将宏名全部替换成字符串的过程称“宏展开”#definePI3.1415926main(){floatl,s,r,v;scanf("%f",&r);l=2.0*PI*r;s=PI*r*r;v=3.0/4*PI*r*r*r;printf("l=%fs=%fv=%f",l,s,v);}结果:l=25.132740s=50.265480v=150.796448预处理命令如果将define#PI中PI的值修改一次,程序中所有PI值都全部自动更改。说明:(1)宏名一般用大写字母

3、以区别变量名。(2)使用宏名可以减少程序的重复书写和修改。(3)宏定义只是简单的替换并不作语法检查。(4)宏定义不是C语句,不能在后面加分号,否则连分号一同替换。(5)#define命令出现在函数的外面,在整个函数内有效。(6)可以用#undef命令终止宏定义的作用域。#defineg9.8main():#undefg终止宏定义g(7)可以引用已经定义的宏名,可以层层置换。#defineR3.0#definePI3.1415926#defineL2*PI*R#defineSPI*R*Rmain(){pr

4、intf(“L=%fS=%f",L,S);}结果:L=18.849556s=28.274333引用PI和R引用PI和R(8)不置换用双引号括起来的与宏名相同的字符。(见上例中L、S)(9)宏定义只作字符置换,不分配内存空间。如:#definei100inti;不分配内存分配2个字节第9章:编译预处理命令9.1.1带参数的宏定义格式:#define宏名(参数表)字符串例如:#defineS(a,b)a*barea=S(3,2)作用:指定宏名、参数和字符串表达式,置换时从左到右将实参(表达式)代替形

5、参(保留非参数字符)。#defineS(a,b)a*barea=S(3,2)3*2置换后得123例9.3计算半径为3.6的圆面积。#definePI3.1415926#defineS(r)PI*r*rmain(){floata,area;a=3.6;area=S(a);printf("r=%fs=%f",a,area);}结果:r=3.600000s=40.715038半径为参数用实参调用宏定义关于宏定义的说明:(1)如果用表达式作为实参,注意括号问题。如分别用2*a和3.6+a作为上例的实参,

6、结果将不同。因不象函数计算后调用,而直接置换为:area=PI*2*a*2*aarea=PI*3.6+a*3.6+a修改宏定义可解决:#defineS(r)PI*(r)*(r)(2)在宏名和参数的括号间不能有空格,否则空格也作为置换的内容。#defineS(r)PI*r*r与题目不符与题目相符不能有空格先计算实参表达式带参数宏和函数的区别:(1)函数调用时,先求实参的值,后代入形参,而宏只是简单的字符替换。(2)函数调用是程序运行时处理的,分配临时单元,而宏置换只在编译时进行的,不分配单元无“值传递”和

7、“返回值”。(3)宏名和参数无类型,只是一个代表符号。#defineCHAR1"CHINA"#defineA3.5main(){floatb=2.0;b=b*A;printf("b=%f,Mymotherlandis%s",b,CHAR1);}(字符)(数值)(4)调用函数只能返回一个值,而调用宏可得到多个值结果。例9.4#definePI3.1415926#defineCIRS(R,L,S,V)L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*Rmain(){floatr,l,s,

8、v;scanf("%f",&r);CIRS(r,l,s,v);printf("r=%6.2f,l=%6.2f,s=%6.2f,v=%6.2f",r,l,s,v);}得到l,s,v三个值(5)使用宏次数多时,宏展开后会使源程序增长,而函数不会使源程序增长。#definePI3.1415926#defineCIRS(R,L,S,V)L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*R(6)宏置换不占运行时间,只占编译时间,而

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

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

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