2022年C语言程序设计教案第九章编译预处理 .pdf

上传人:C****o 文档编号:39679422 上传时间:2022-09-07 格式:PDF 页数:6 大小:51.56KB
返回 下载 相关 举报
2022年C语言程序设计教案第九章编译预处理 .pdf_第1页
第1页 / 共6页
2022年C语言程序设计教案第九章编译预处理 .pdf_第2页
第2页 / 共6页
点击查看更多>>
资源描述

《2022年C语言程序设计教案第九章编译预处理 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言程序设计教案第九章编译预处理 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第九章编译预处理课题:第九章 编译预处理教学目的:1、了解预处理的概念及特点2、掌握有参宏与无参宏的定义及使用,领会文件包含的使用及效果教学重点:教学难点:掌握宏的使用,文件包含有参宏与无参宏的使用步骤一复习引导ANSI C 标准规定可以在C源程序中加入一些“预处理命令”,以改进程序设计环境,提高编程效率。这些预处理命令是由ANSI C 统一规定的,但它不是C语言本身的组成部分,不能直接对它们进行编译。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行“预处理”,即根据预处理命令对程序作相应的处理。经过预处理后程序不再包括预处理命令了,最后再由编译程序对预处理后的源程序进行通常的编译

2、处理,得到可供执行的目标代码。步骤二讲授新课C语言与其他高级语言的一个重要区别是可以使用预处理命令和具有预处理的功能。C提供的预处理功能主要有以下三种:宏定义、文件包含、条件编译。分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般C 语句相区别,这些命令以符号“#”开头。9.1 宏定义宏:代表一个字符串的标识符。宏名:被定义为“宏”的标识符。宏代换(展开):在编译预处理时,对程序中所有出现的“宏名”,用宏定义中的字符串去代换的过程。一、不带参数的宏定义一般形式:#define 标识符字符串#define PI 3.1415926 main()float l,s,r,v;printf

3、(“input radius:”);scanf(“%f”,&r);l=2.0*PI*r;s=PI*r*r;v=3.0/4*PI*r*r*r;printf(“%10.4f,%10.4f,%10.4n”,l,s,v);名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -例如:由键盘输入y 值,求表达式:3(y2+3y)+4(y2+3y)+y(y2+3y)#define M(y*y+3*y)main()int s,y;printf(“Input a number:”);scanf(“%d”,&y);s=3*M+4*M+y*M;printf(“s=%dn”,s);先宏展开:s=3*

4、(y*y+3*y)+4*(y*y+3*y)+y*(y*y+3*y)再与源程序合并说明:宏名一般用大写表示,以便与变量名区分。使用宏名使程序易读,易修改。只作简单的置换,不作正确性检查。宏定义不是C语句,不必在行末加分号。宏名的作用域一般从自定义命令到本源文件结束。可以用#undef命令终止宏定义的作用域。宏定义允许嵌套,允许层层置换。宏名在源程序中用双引号括起来,则TC中预处理不对其作宏代换。例:printf(“L=%f”,L);中双引号内 L不替换。宏定义与定义的变量不同,宏只作字符替换,不分配内存空间。对“输出格式”进行宏定义,可以减少书写麻烦例如:#define P printf#def

5、ine D“%d,%d,%dn”#define F“%6.2f,%6.2f,%6.2fn”main()int a=5,c=8,e=11;float b=3.8,d=9.7;f=21.08;P(D,a,c,e);P(F,b,d,f);P(F,a+b,c+d,e+f);二、带参数的宏定义格式:#define 宏名(参数表)字符串例:#define s(a,b)a*b area=s(3,2);名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -对带参的宏展开后,为area=3*2;例:#define M(y)y*y+3*y k=M(5);对其展开后,为k=5*5+3*5;说明:对

6、带参数的宏展开只是将宏名后括号内的实参字符串代替#define命令行中的形参。宏定义时,在宏名与带参数的括号之间不应加空格,否则将空格以后的字符都作为替代字符串的一部分。带参宏定义,形参不分配内存单元,因此不必作类型定义。(与函数的区别之一)带参宏与函数的区别之二:例如:main()int i=1;while(i=5)printf(“%dt”,SQ(i+);SQ(int y)return(y)*(y);其结果为:1 4 9 16 25 如:#define SQ(y)(y)*(y)main()int i=1;while(ib)?a:b main()int x,y,max;scanf(“%d%d”

7、,&x,&y);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -max=MAX(x,y);printf(“max=%dn”,max);带参的宏定义和函数不同:1、函数调用时,先求实参表达式值,后代入。而带参的宏只是进行简单的字符替换。2、函数调用是在程序运行时处理的,分配临时的内存单元。而宏展开则是在编译时进行的,不分配内存单元,不进行值的传递,也无“返回值”。3、对函数中的实参和形参都要定义类型,类型应一致。而宏不存在类型问题,宏名和参数无类型,只是一个符号代表,展开时代入指定的字符即可。4、调用函数只可得到一个返回值,而用宏可以设法得到几个结果。5、使用宏次数多时,

8、宏展开后使源程序增长,而函数调用不使源程序变长。6、宏替换不占运行时间,只占编译时间。而函数调用则占用运行时间(分配单元、保留现场、值传递、返回)一般用宏代表简短的表达式比较合适。也可利用宏定义实现程序的简化。例9.5:#define PR printf#define NL“n”#define D“%d”#define D1 D NL#define D2 D D NL#define D3 D D D NL#define D4 D D D D NL#define S“%s”main()int a,b,c,d;char string=“CHINA”;a=1;b=2;c=3;d=4;PR(D1,a)

9、;PR(D2,a,b);PR(D3,a,b,c);PR(D4,a,b,c,d);PR(S,string);9.2“文件包含”处理“文件包含”处理是指将指定的被包含文件的全部内容插到该控制行的位置处,使其成为源文件的一部分参与编译。因此,被包含的文件应该是源文件。通常置于源程序文件的首部,故也称为“头文件”。C 编译系统提供的头文件扩展名为“.h”,但设计者可根据实际情况,自行确定包含文件的后缀、名字及其位置。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -一般形式,#include“文件名”或#include 文件 format.h#define PR printf#d

10、efine NL“n”#define D“%d”#define D1 D NL#define D2 D D NL#define D3 D D D NL#define D4 D D D D NL#define S“%s”文件 file1.c#include“format.h”main()int a,b,c,d;char string=“CHINA”;a=1;b=2;c=3;d=4;PR(D1,a);PR(D2,a,b);PR(D3,a,b,c);PR(D4,a,b,c,d);PR(S,string);注:被包含的文件应是源文件,而不应是目标文件。头文件除了可以包含函数原型和宏定义外,也可以包括结

11、构体类型定义和全局变量定义等。说明:1、一个 include命令只能指定一个被包含文件,如果要包含n个文件,要用n个include命令。2、如果文件 1包含文件 2,而文件 2中要用到文件 3的内容,则可在文件1中用两个 include命令分别包含文件2和文件 3,而且文件 3应出现在文件 2之前,即在“file1.c”中定义:#include“file3.h”#include“file2.h”3、在一个被包含文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。4、被包含文件(file2.h)与其所在的文件(file1.c),在预编译后已成为同一个文件。5、在#include 命令中,文

12、件名可以用双引号或尖括号括起来。如:#include 或#include“file2.h”二者的区别:用尖括号时称为标准方式,系统到存放C库头文件所在的目录中寻找要包含的文件。用双引号时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 6 页 -#include“c:myfile.h”/*正确*/#include /*正确*/#include /*错误*/用尖括号:带路径:按指定路径去寻找被包含文件,但此时被包含文件不能以“.h”结尾,否则错误。不带路径:仅从指定标准目录下找。用引号:带路径:按指定路径去寻找被包含文件,不再从当前目录和指定目录下找。不带路径:先在当前目录下找,找不到再在系统指定的标准目录下找。步骤三课堂小结本课主要讲解了宏定义、“文件包含”处理。对带参数的宏的使用,及与函数的使用的区别。搞清经常使用的头文件。步骤四布置作业上机作业:(第九章课后练习)9.4 书面作业:(第九章课后练习)9.7、9.8 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁