欢迎来到天天文库
浏览记录
ID:50083333
大小:215.50 KB
页数:35页
时间:2020-03-08
《C语言程序设计 教学课件 作者 丁峻岭 等 第八章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章编译预处理8.1宏定义(#define)8.2文件包含(#include)8.3条件编译课后练习为了扩展C语言的编程环境,提高编程质量与技巧,C语言提供了编译预处理的功能。所谓“编译预处理”,是C编译系统中的预处理程序按源程序中的预处理命令进行的一些预加工。C语言提供了宏定义、文件包含和条件编译三种主要预处理命令。预处理命令均以“#”打头,末尾不加分号。C语言在编译之前,先对这些特殊的命令进行预处理(即当预处理程序遇到以字符“#”开头的一行时,就按预处理命令形式执行有关功能),然后再将预处理的
2、结果与源程序一起编译、处理,以得到目标代码。C语言的预处理命令可以出现在程序的任意位置,其作用范围是自出现点到所在源程序的末尾或由宏命令指定的终止位置。编译预处理是C语言的一个重要特点。它能改善程序设计的环境,有助于编写易移植、易调试的程序,也是模块化程序设计的一个重要工具。8.1宏定义(#define)宏定义是用预处理命令#define指定的预处理。下面分别对不带参宏定义与带参宏定义加以介绍。8.1.1不带参宏定义1.不带参宏定义的形式在C程序中可以用#define命令定义不带参宏定义:#de
3、fine宏名宏体其中宏名与宏体均为字符串。预处理时,将把程序中该宏定义之后的所有宏名用宏体替换。符号常数的定义就是这种宏定义的一种应用。比如:#definePI3.14159265它的作用是用宏名PI来代替宏体“3.14159265”这个字符串。在预处理时,把程序中在该宏定义以后的所有PI都用“3.1415926”代替。通常把预编译时将宏名替换成宏体的过程称为“宏展开”。【例8.1】计算圆的周长和面积。#definePI3.14159265#defineRADIUS2.0doublecircum
4、(){return(2.0*PI*RADIUS);}doublearea(){return(PI*RADIUS*RADIUS);}main(){circum();area();}经过预处理后将形成如下的源文件:doublecircum(){return(2.0*3.14159265*2.0);}doublearea(){return(3.14159265*2.0*2.0);}main(){circum();area();}这是一种简单的字符替代,不进行任何计算。2.使用宏定义的优
5、点(1)提高了程序的可读性。观察文件中预处理前后的语句:return(2.0*PI*RADIUS);return(2.0*3.1415926536*2.0);第一句显然比第二句的可理解性要好。(2)比较容易修改参数值。如要将RADIUS的值由2.0修改为3.0,只要在#define命令中修改一处便可。而在不使用宏定义的文件中,这种修改将比较麻烦。3.宏定义的使用特点(1)宏名一般习惯用大写字母表示,以与变量名相区别。当然,也可以用小写字母。(2)宏体不仅可以是字符串常数,也可以是表达式或语
6、句组成的字符串。【例8.2】计算圆的周长和面积。#definePI3.14159265#defineRADIUS2.0#defineCIRCUMreturn(2.0*PI*RADIUS);#defineAREAreturn(PI*RADIUS*RADIUS);doublecircum(){CIRCUM}doublearea(){AREA}main(){circum();area();}宏定义应先定义后使用,要注意在程序中的顺序。【例8.3】宏定义在程序中的顺序应用举例。#defin
7、eDYprintf#defineHC""#defineA"%d"#defineA1AHC#defineA2AAHC#defineA3AAAHC#defineA4AAAAHCmain(){inta=1,b=2,c=3,d=4;DY(A1,a);DY(A2,a,b);DY(A3,a,b,c);DY(A4,a,b,c,d);}运行结果为:1121231234(3)用#define命令还可以把多个语句定义为宏。例如:#definePRAprintf("%d",12);pu
8、tchar('');(4)宏定义不是C语句,不必在行末加分号。如果加了分号则会连分号一起进行替换。例如:#definePI3.14159265;#defineRADIUS2.0;:area=PI*RADIUS*RADIUS;经宏展开后,该语句为:area=3.1415926;*2.0;*2.0;;将出现语法错误。(5)#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束或由宏命令#undef指定的终止位置。(6)可以用#un
此文档下载收益归作者所有