欢迎来到天天文库
浏览记录
ID:52338382
大小:199.01 KB
页数:60页
时间:2020-04-04
《计算机本科C语言讲稿-编译预处理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第六章预处理命令宏定义文件包含条件编译6.1概述1.所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等。合理地使用预处理功能编写的程序便于阅读、修改、移植和调试,也有利于模块化程序设计。2可执行程序形成的三个过程预处理、编译和连接是形成可执行程序的三个重要过程,这三个过程的每一步都可将一种形式的程序代码改变成另一种形式的程序代码。1)预处理程序负责处理组成程序
2、的预处理命令,从而将带有预处理命令的程序文件转化为纯粹的C程序。c:turboc2zxjc1.cvoidp1(){printf(“****************”);}c:turboc2zxjc2.cvoidp2(){printf(“mynameiszxj”);}c:turboc2zxjc3.c#include“c1.c”#include“c2.c”main(){p1();p2();p1();}经过预处理程序(预编译程序)的处理,从而将带有预处理命令的程序文件c3.c转化为:voidp1(){printf(“****************”
3、);}voidp2(){printf(“mynameiszxj”);}main(){p1();p2();p1();}2)编译程序:将一个个C源程序翻译成对应的二进制代码文件(后缀名为.obj的文件)。3)连接程序:将组成程序的所有.obj和用到的库文件连接起来,形成一个完整的可执行程序。6.2宏定义在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。在C语
4、言中,“宏”分为有参数和无参数两种。6.2.1无参宏定义其定义的一般形式为:#define标识符字符串其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。例如:#defineN100#defineM(y*y+3*y)#definePRprintf【例6.1】#defineM(y*y+3*y)main(){ints,y;printf("inputanumber:");scanf("%d",&y);s=3*M+4*M+5*M;printf("s=%d",s)
5、;}宏定义宏调用经过预处理程序处理(宏展开)之后纯粹的C代码main(){ints,y;printf("inputanumber:");scanf("%d",&y);s=3*(y*y+3*y)+4*(y*y+3*y)+5*(y*y+3*y);printf("s=%d",s);}对于宏定义还要说明以下几点:1)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。2)宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。3)宏定义其作用域为宏定
6、义命令起到源程序结束。如要终止其作用域可使用#undef命令。例如:#definePI3.14159main(){……}f1(){……}例如:#definePI3.14159main(){……}#undefPIf1(){……}4)宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。【例9.2】#defineOK100main(){printf("OK");printf("");}5)宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。例如:#definePI3.1415926#defineSPI*y*y/*PI是已定义的宏名*
7、/对语句:printf("%f",S);在宏代换后变为:printf("%f",3.1415926*y*y);6)习惯上宏名用大写字母表示,以便于与变量区别;但也允许用小写字母。7)对“输出格式”作宏定义,可以减少书写麻烦。【例6.3】中就采用了这种方法。#definePprintf#defineD"%d"#defineF"%f"main(){inta=5,c=8,e=11;floatb=3.8,d=9.7,f=21.08;P(DF,a,b);P(DF,c,d);P(DF,e,f);}6.2.2带参宏定义C
此文档下载收益归作者所有