预处理与程序组织

预处理与程序组织

ID:38351346

大小:370.31 KB

页数:24页

时间:2019-06-10

预处理与程序组织_第1页
预处理与程序组织_第2页
预处理与程序组织_第3页
预处理与程序组织_第4页
预处理与程序组织_第5页
资源描述:

《预处理与程序组织》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十一章 预处理命令与程序组织学习目标C语言的预处理命令,宏替换的使用方法程序的组织方式课程内容11.1概述11.2#define定义宏11.3预定义宏11.4#include包含11.5条件编译11.6程序组织预处理指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。11.1概述源文件*.c运行文件*.exe编译编译编译目

2、标文件*.obj连接编译连接连接编译预处理编译编译预处理包括:宏定义文件包含条件编译分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C语句相区别,这些命令以符号“#”开头。源文件*.c运行文件*.exe目标文件*.obj编译连接main(){floatr,s,c;scanf(“%f”,&r);s=r*r*3.14;c=2*r*3.14;printf(“s=%f,c=%f”,s,c);}如何修改圆周率11.2#define定义宏宏定义的功能:在源程序中每次遇到宏名时,均以定义的串代换它

3、。这个替换过程称为“宏代换”或“宏展开”宏定义的形式:宏取消:#define宏名字符串#undef宏名如果被取消的宏实际上没有被#define所定义,针对它的#undef并不会产生错误。当一个宏定义被取消后,可以再度定义它。源程序:#definePI3.14#defineSPI*r*r#defineV4*S*r/3main(){floatr;printf("Inputr:");scanf("%f",&r);printf("S=%.2fV=%.2f",S,V);}编译预处理后的程序:main

4、(){floatr;printf("Inputr:");scanf("%f",&r);printf("S=%.2fV=%.2f",3.14*r*r,4*3.14*r*r*r/3);}SVSV进入编译宏代换不是函数。与函数的区别:简单置换,与调用函数不同,次数多时使程序变长,而函数调用不使程序变长。宏展开在编译时进行,占用编译时间,不占运行时间,不进行值的传递处理,无返回值;函数占运行时间。宏是简单置换,没有返回值;函数有返回值。不定义形参类型,无类型。宏特点:替换需要注意替换时可能引起的优

5、先级问题。最好的办法就是将宏的参数直接用括号括起来。【例11.1】创建一个求两个数中较大数的宏1#defineMax(value1,value2)(value1>value2)?value1:value22voidmain()3{4intiVar1=3,iVar2=8;5floatfVar1=3.5,fVar2=10.6;6doubledVar1=10.0,dVar2=100.0;7printf("Twointegerscompare:");8printf("Max(%d,%d)=%d",

6、iVar1,iVar2,Max(iVar1,iVar2));9printf("Twofloatscompare:");10printf("Max(%f,%f)=%f",fVar1,fVar2,Max(fVar1,fVar2));11printf("Twodoublescompare:");12printf("Max(%f,%f)=%f",dVar1,dVar2,Max(dVar1,dVar2));13}───────────────────────────────────────运

7、行结果如下:Twointegerscompare:Max(3,8)=8Twofloatscompare:Max(3.500000,10.600000)=10.600000Twodoublescompare:Max(10.000000,100.000000)=100.000000宏定义参数没有设置类型当宏定义超过1行时,使用连接符(即反斜杆“”【例11.2】超过1行的宏1intfunc_swap(intA,intB)2{3inttemp;4temp=A;5A=B;6B=temp;7returnte

8、mp;8}9#defineSWAP(A,B,TYPE)10{11TYPEtemp=A;12A=B;13B=temp;14}函数定义宏定义15voidmain()16{17intiVar1=10,iVar2=20;18printf("Beforefunc_swap:iVar1=%d,iVar2=%d",iVar1,iVar2);19func_swap(iVar1,iVar2);20printf("Afterfunc_swap:iVar1=%d,iVar2=%d",i

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

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

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