谭浩强C程序设计件预处理学习教案.ppt
上传人:王子****青蛙 上传时间:2024-09-13 格式:PPT 页数:31 大小:2MB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

谭浩强C程序设计件预处理学习教案.ppt

谭浩强C程序设计件预处理学习教案.ppt

预览

免费试读已结束,剩余 21 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基本概念基本概念9.1宏定义(dìngyì)#include<stdio.h>#definePI3.1415926voidmain(){floatl,s,r,v;printf("inputradius:");scanf("%f",&r);l=2.0*PI*r;s=PI*r*r;v=4.0/3*PI*r*r*r;printf("l=%10.4f\ns=%10.4f\nv=%10.4f\n",l,s,v);}inputradius:4↙(4)宏定义不是C语句,不必在行末加分号。如果加了分号则会连分号一起进行置换。(5)#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。通常,#define命令写在文件开头,函数之前,作为文件一部分,在此文件范围内有效。(6)可以用#undef命令终止(zhōngzhǐ)宏定义的作用域。例如:#defineG9.8_______voidmain()↑{G的有效(yǒuxiào)范围…}-----↓----#undefGf1(){…}(7)在进行宏定义时,可以(kěyǐ)引用已定义的宏名,可以(kěyǐ)层层置换。经过宏展开后,printf函数中的输出(shūchū)项L被展开为:2*3.1415926*3.0S展开为3.1415926*3.0*3.0printf函数调用语句展开为:(8)对程序中用双撇号括起来的字符串内的字符,即使与宏名相同,也不进行置换。(9)宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,只作字符替换(tìhuàn),不分配内存空间。9.1.2带参数(cānshù)的宏定义对带实参的宏(如S(3,2),则按#define命令行中指定的字符(zìfú)串从左到右进行置换。若串中包含宏中的形参(如a、b),则将程序中相应的实参(可以是常量、变量或表达式)代替形参。如果宏定义中的字符(zìfú)串中的字符(zìfú)不是参数字符(zìfú)(如a*b中的*号),则保留。这样就形成了置换的字符(zìfú)串。#include<stdio.h>#definePI3.1415926#defineS(r)PI*r*rvoidmain(){floata,area;a=3.6;area=S(a);printf("r=%f\narea=%f\n",a,area);}(1)对带参数(cānshù)的宏展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。(2)在宏定义时,在宏名与带参数(cānshù)的括弧之间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。(1)函数调用时,先求出实参表达式的值,然后代入形参。而使用带参的宏只是进行简单的字符替换(tìhuàn)。(2)函数调用是在程序运行时处理的,为形参分配临时的内存单元。而宏展开则是在编译前进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。(3)对函数中的实参和形参类型要求一致。而宏名无类型,它的参数也无类型,只是一个符号代表,展开时代入指定的字符串即可。宏定义时,字符串可以是任何类型的数据。(4)调用函数只可得到一个返回值,而用宏可以设法得到几个结果。#include<stdio.h>#definePI3.1415926#defineCIRCLE(R,L,S,V)L=2*PI*R;S=PI*R*R;V=4.0/3.0*PI*R*R*Rvoidmain(){floatr,l,s,v;scanf("%f",&r);CIRCLE(r,l,s,v);printf("r=%6.2f,l=%6.2f,s=%6.2f,v=%6.2f\n",r,l,s,v);}voidmain(){floatr,l,s,v;scanf("%f",&r);l=2*3.1415926*r;s=3.1515926*r*r;v=4.0/3/0*3.1415926*r*r*r;printf("r=%6.2f,l=%6.2f,s=%6.2f,v=%6.2f\n",r,l,s,v);}(5)使用宏次数多时,宏展开后源程序长,因为每展开一次都使程序增长,而函数调用不会使源程序变长。(6)宏替换不占运行时间(shíjiān),只占编译时间(shíjiān)。而函数调用则占运行时间(shíjiān)(分配单元、保留现场、值传递、返回)。例9.5通过宏展开(zhǎnkāi)得到若干个结果。所谓“文件包含”处理是指一个源文件可以将另外(lìnɡwài)一个源文件的全部内容包含进来。C语言提供了#include命令用来实现“文件包含”的操作。例9.6将例9.5时格式(géshi)宏做成头