第11章 预处理与程序组织.ppt





《第11章 预处理与程序组织.ppt》由会员分享,可在线阅读,更多相关《第11章 预处理与程序组织.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十一章预处理命令与程序组织 学习目标学习目标lC语言的预处理命令,宏替换的使用方法l程序的组织方式课程内容课程内容l11.1 概述l11.2#define定义宏l11.3 预定义宏l11.4#include包含l11.5 条件编译l11.6 程序组织n预处理指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。n预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。11.1概述概述源文件源文件源文件源文件 *.c.c.c.c运行文件运行文件运行文件运行文件*.exe.exe
2、.exe.exe编译编译编译编译编译编译编译编译编译编译编译编译目标文件目标文件目标文件目标文件*.objobjobjobj连接连接连接连接编译编译编译编译连接连接连接连接连接连接连接连接编译预处理编译预处理编译预处理编译预处理 编编编编 译译译译n编译预处理包括:n 宏定义宏定义n 文件包含文件包含n 条件编译条件编译分别用宏定义命令宏定义命令、文件包含命令文件包含命令、条件编译命令条件编译命令来实现。为了与一般C语句相区别,这些命令以符号符号“#”开头开头。源文件源文件源文件源文件 *.c.c.c.c运行文件运行文件运行文件运行文件*.exe.exe.exe.exe目标文件目标文件目标文件
3、目标文件*.objobjobjobj编译编译编译编译连接连接连接连接main()main()main()main()float float float float r,s,cr,s,cr,s,cr,s,c;scanf(scanf(scanf(scanf(“%f%f%f%f”,&r,&r,&r,&r););););s=r*r*s=r*r*s=r*r*s=r*r*3.143.143.143.14;c=2*r*c=2*r*c=2*r*c=2*r*3.143.143.143.14;printf(printf(printf(printf(“s s s s=%f,c=%=%f,c=%=%f,c=%=%f,
4、c=%f f f f”,s,c,s,c,s,c,s,c););););如何修如何修改圆周率改圆周率11.2#define定义宏n宏定义的功能:宏定义的功能:在源程序中每次遇到宏名时,均以定义的串定义的串代换它。这个替换过程称为“宏代换宏代换”或“宏展开宏展开”n宏定义的形式:宏定义的形式:n宏取消:宏取消:#define#define 宏名宏名 字符串字符串#undefundef 宏名宏名如果被取消的宏实际上没有被#define所定义,针对它的#undef并不会产生错误。当一个宏定义被取消后,可以再度定义它。n源程序:n#define PI 3.14n#define S PI*r*rn#def
5、ine V 4*S*r/3nmain()nfloat r;n printf(nInput r:);n scanf(%f,&r);n printf(S=%.2f V=%.2fn,S,V);n编译预处理后的程序:main()float r;printf(nInput r:);scanf(%f,&r);printf(S=%.2f V=%.2fn,3.14*r*r,4*3.14*r*r*r/3);SVSV进入编译进入编译进入编译进入编译n宏代换不是函数。与函数的区别:宏代换不是函数。与函数的区别:简单置换简单置换,与调用函数不同,次数多时使程序,与调用函数不同,次数多时使程序变长,变长,而函数调用不使
6、程序变长。而函数调用不使程序变长。宏展开在编译时进行,占用编译时间,宏展开在编译时进行,占用编译时间,不占运不占运行时间,不进行值的传递处理,无返回值行时间,不进行值的传递处理,无返回值;函函数占运行时间。数占运行时间。宏是简单置换,没有返回值没有返回值;函数有返回值函数有返回值。不定义形参类型,无类型不定义形参类型,无类型。n宏特点:宏特点:替换替换需要注意替换时可能引起的优先级问题优先级问题。最好的办法就是将宏的参数直接用括号括起来将宏的参数直接用括号括起来。【例例11.1】创建一个求两个数中较大数的宏创建一个求两个数中较大数的宏1#define Max(value1,value2)(va
7、lue1value2)?value1:value22void main()34int iVar1=3,iVar2=8;5float fVar1=3.5,fVar2=10.6;6double dVar1=10.0,dVar2=100.0;7printf(Two integers compare:n);8printf(Max(%d,%d)=%dn,iVar1,iVar2,Max(iVar1,iVar2);9printf(Two floats compare:n);10printf(Max(%f,%f)=%fn,fVar1,fVar2,Max(fVar1,fVar2);11printf(Two do
8、ubles compare:n);12printf(Max(%f,%f)=%fn,dVar1,dVar2,Max(dVar1,dVar2);13 运行结果如下:运行结果如下:Two integers compare:Max(3,8)=8Two floats compare:Max(3.500000,10.600000)=10.600000Two doubles compare:Max(10.000000,100.000000)=100.000000宏定义参数没有设置类型 当宏定义超过当宏定义超过1行时,使用连接符(即反斜杆行时,使用连接符(即反斜杆“”【例11.2】超过1行的宏1int fun
9、c_swap(int A,int B)23int temp;4temp=A;5A=B;6B=temp;7return temp;89#define SWAP(A,B,TYPE)10 11TYPE temp=A;12A=B;13B=temp;14 函数定义宏定义15 void main()1617int iVar1=10,iVar2=20;18printf(Before func_swap:iVar1=%d,iVar2=%dn,iVar1,iVar2);19func_swap(iVar1,iVar2);20printf(After func_swap:iVar1=%d,iVar2=%dn,iVa
10、r1,iVar2);21printf(Before SWAP:iVar1=%d,iVar2=%dn,iVar1,iVar2);22SWAP(iVar1,iVar2,int);23printf(After SWAP:iVar1=%d,iVar2=%dn,iVar1,iVar2);24运行结果如下:Before func_swap:iVar1=10,iVar2=20After func_swap:iVar1=10,iVar2=20Before SWAP:iVar1=10,iVar2=20After SWAP:iVar1=20,iVar2=10调用函数宏替换int temp=iVar1;iVar1=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第11章 预处理与程序组织 11 预处理 程序 组织

限制150内