C语言程序设计 教学课件 作者 罗朝盛第7章 编译预处理.ppt

C语言程序设计 教学课件 作者 罗朝盛第7章 编译预处理.ppt

ID:50298206

大小:189.00 KB

页数:43页

时间:2020-03-07

C语言程序设计 教学课件 作者 罗朝盛第7章 编译预处理.ppt_第1页
C语言程序设计 教学课件 作者 罗朝盛第7章 编译预处理.ppt_第2页
C语言程序设计 教学课件 作者 罗朝盛第7章 编译预处理.ppt_第3页
C语言程序设计 教学课件 作者 罗朝盛第7章 编译预处理.ppt_第4页
C语言程序设计 教学课件 作者 罗朝盛第7章 编译预处理.ppt_第5页
资源描述:

《C语言程序设计 教学课件 作者 罗朝盛第7章 编译预处理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、本章要求:掌握用#define定义无参数宏和带有参数宏定义和调用方法;掌握#include文件包含的使用方法,理解多个源文件的C程序的运行;了解条件编译的使用。本章难点:带参宏定义和使用方法本章重点:带参宏定义和使用方法、文件包含的使用第7章编译预处理第7章编译预处理在C语言源程序中以“#”号开头的预处理命令都放在函数之外,一般都放在源文件的前面,它们称为预处理部分。所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能,由预处理程序负责完成。对源文件进行编译时,系统将自

2、动引用预处理程序对源程序中预处理部分作处理,处理完再自动进入对源程序的编译。C语言提供了多种预处理功能,主要有宏定义、文件包含、条件编译。7.1宏定义预处理命令#define用来建立符号常量(用符号表示的常量)和宏(用符号定义的操作)。C语言源程序中用一个标识符来表示一个字符串,称为宏。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。C语言中,“宏”分为有参数和无

3、参数两种。7.1宏定义7.1.1无参宏定义例7-1通过键盘输入50个实数,将其中大于它们平均值的数打印输出。(未使用宏定义)voidmain(){inti;floatx[50],ave=0;for(i=0;i<50;i++){scanf("%f",&x[i]);ave+=x[i];}ave=ave/50;for(i=0;i<50;i++)if(x[i]>ave)printf("%f",x[i]);}7.1宏定义7.1.1无参宏定义例7-2通过键盘输入100个实数,将其中大于它们平均值的数打印输出。(使用无参宏定义)#d

4、efineNUM100voidmain(){inti;floatx[NUM],ave=0;for(i=0;iave)printf("%f",x[i]);}7.1宏定义7.1.1无参宏定义一般形式:#define标识符字符串第一部分为#define命令本身。第二部分为自定义的宏名。宏的名字中不允许有空格,遵循C语言变量的命名规则。第三部分(#define行的其余部分)称

5、为替换文本。预处理器在处理过程中发现程序中的宏实例后,会用它的等价替换文本代替宏。从宏变成最终替换文本的过程为“宏展开”或“宏代换”。如例7-2的程序被预处理之后,程序中所有的NUM已经由预处理器替换成了100。从这里可以看出给符号常量取有意义的名字能提高程序的可读性和可维护性。7.1宏定义7.1.1无参宏定义例7-3输入一个圆的半径,输出该圆的周长。#definePI3.14#defineC2*PI*r/*PI是已定义的宏名*/voidmain(){doubler;printf("EnterTheRadius")

6、;scanf("%lf",&r);printf("ThePerimeter=%lf",C);}printf("ThePerimeter=%lf",2*3.14*r);printf("ThePerimeter=%lf",2*PI*r);7.1宏定义7.1.1无参宏定义C语言允许宏定义嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理器进行层层代换。本例的宏定义用“C”替换表达式“2*PI*r”,因此宏不仅可以代替常量,宏还可以表示任何字符串,甚至是整个表达式。如果本例中没有“doubler;”

7、这个定义,则程序编译时会出现变量未定义的语法错误。因此,我们还要注意若替换字符串中含有其他字符,一般需要在程序中定义,否则编译时会出现标识符(变量)未定义的错误。这样做的原因在于预处理器不能理解C语言,预处理时不检查语法,不分配内存空间,仅作简单字符串置换。源程序只有在进行编译时才作语法检查。7.1宏定义7.1.1无参宏定义例7-4分析下列程序是否有错。#defineX10#defineY20;voidmain(){intsum;sum=X+Yprintf("X+Y=%d",sum);}程序运行结果:X+Y=307.1

8、宏定义7.1.1无参宏定义本例中语句“sum=X+Y”后面没有分号结尾,但是程序并没有编译出错。原因在于这条语句在预处理过程中已经被展开成“sum=10+20;”是符合C语法的。注意,宏定义不是语句,不必在末尾加上分号。若加了分号,则分号也是作为替换字符串的一部分。宏名在源程序中若用引号括起来,则预处理器不对其作宏代换。所以本例的

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

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

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