c语言课件 第12章

c语言课件 第12章

ID:5322026

大小:307.50 KB

页数:38页

时间:2017-11-16

c语言课件 第12章_第1页
c语言课件 第12章_第2页
c语言课件 第12章_第3页
c语言课件 第12章_第4页
c语言课件 第12章_第5页
资源描述:

《c语言课件 第12章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第12章编译预处理12.1宏定义12.2文件包含12.3条件编译12.4图形处理习题十二12.1宏定义12.1.1不带参数的宏定义定义形式:#define宏名宏体宏名是一自定义标识符,宏体是一字符串,在程序中可用宏名代表宏体。例如,用PI代表3.1415926,用PR代表printf,宏定义如下:(1)#definePI3.1415926(2)#defineePRprintf程序中凡是出现3.1415926的地方,都可以以PI出现,凡是出现printf的地方,都可以以PR出现。例12-1利用宏定义求圆的周长和面积。/*

2、程序12-1,利用宏定义求圆的周长和面积*/#definePI3.1415926#defineR1.0main(){floatl,s;l=2.0*PI*R;s=PI*R*R;PR(″周长=%f,面积=%f″,l,s);}上面程序在编译前将进行宏展开,宏展开以后变为:main(){floatl,s;l=2.0*3.1415926*1.0;s=3.1415926*1.0*1.0;printf(″周长=%f,面积=%f″,l,s);}说明:(1)宏名一般习惯用大写字母表示,以便与变量名相区别。当然可以使用小写

3、字母。(2)宏定义是用宏名简单替换宏体,也就是作简单的置换,不作语法检查,出现错误也不会报告,只有在宏展开后编译时才会报告错误。(3)程序中双引号中与宏名相同的内容不被替换。(4)宏展开后源程序将变长。(5)使用宏名,可以减少程序中重复书写某些宏体的工作量。(6)宏定义一般放在程序的开头,宏名的有效范围为定义位置到文件结束。(7)宏定义可以嵌套,后定义的宏可使用已定义的宏。12.1.2带参数的宏定义定义形式:#define宏名(参数表)宏体带参数的宏展开时要从左至右进行参数的简单替换,使用起来较无参数宏定义复杂。例

4、如:(1)#defineS(n)(n)*(n)*(n)(2)#defineT(n)1/(n)第一个式子代表n的立方,第二个式子代表n的倒数。说明:(1)列出的参数必须在宏体中用到。(2)带参数的宏展开只是将实参简单替换形参。如有宏定义:#defineS(n)n*n*n若将形参n用实参a+b替换,S(a+b)会变成a+b*a+b*a+b,显然与原意不相符。如将宏定义改成:#defineS(n)(n)*(n)*(n)S(a+b)才被替换为需要的(a+b)*(a+b)*(a+b)。因此,在带参的宏定义中,参数一般应加括号来描

5、述。(3)宏定义时,在宏名与带参数的括号之间不应加空格,否则将空格以后的部分都作为宏体。例如:#defineS(n)(n)*(n)*(n)S被认为是不带参数的宏名,它代表“(n)(n)*(n)*(n)”这样的宏体。(4)如在宏体中的参数前加上“#”,则在宏展开后该实参前后会加上双引号,变成字符串。例12–2利用带参数的宏定义求圆的周长和面积/*程序12-2,利用带参数的宏定义求圆的周长和面积*/#defineR1.0#definePI3.14159#defineC(r)2*PI*(r)#defineS(r)PI*(r)*

6、(r)main(){printf(″周长=%f,面积=%f″,C(R),S(R));}上面程序宏展开后如下:main(){printf(″周长=%f,面积=%f″,2*3.14159*1.0,3.14159*1.0*1.0);}带参数的宏又称为函数宏,函数宏不是函数,这是因为:(1)函数调用要求形参和实参类型一致,如实参是表达式,则必须先计算出值;宏名无类型,宏体也无类型,宏展开只进行参数的简单替换。(2)函数调用是在程序运行时处理的,分配临时的内存单元,有返回值;而宏展开是在编译前进行的,展开时并不分配内存单元,不进

7、行值的传递,无返回值。(3)宏展开将使源程序变长;而函数调用不增加源程序的长度。(4)宏替换不占用运行时间,只占用编译时间;而函数调用则占用运行时间(分配单元、保留现场、值传递、返回)。(5)一般用宏代表简单的表达式比较合适。有些问题用宏和函数都可以解决。12.1.3预定义宏预定义宏由系统提供,宏名的开始和结尾均为下划线。_TURBOC_:当前TURBOC的版本号。_LINE_:源程序行号,第一行定义为1。_FILE_:源程序文件名。_DATE_:当前编译日期。_TIME_:当前编译时间。12.1.4取消宏定义形式一:#undef宏

8、名取消前面定义的宏名,使宏名局部化,取消以后不能再使用。12.2文件包含文件包含是指一个C语言源程序中将另一个C语言源程序包含进来,通过include预处理指令实现。一般形式:#include″被包含文件名″或#include<

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

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

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