第9章_预处理命.ppt

上传人:hyn****60 文档编号:78014834 上传时间:2023-03-16 格式:PPT 页数:12 大小:95.50KB
返回 下载 相关 举报
第9章_预处理命.ppt_第1页
第1页 / 共12页
第9章_预处理命.ppt_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《第9章_预处理命.ppt》由会员分享,可在线阅读,更多相关《第9章_预处理命.ppt(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第九章第九章2 基本概念基本概念预处理命令是由预处理命令是由ANSI CANSI C统一规定的,但是它不是统一规定的,但是它不是C C语言语言本身的组成部分,不能直接对它们进行编译(因为编本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。必须在对程序进行通常的编译程序不能识别它们)。必须在对程序进行通常的编译之前,先对程序中这些特殊的命令进行译之前,先对程序中这些特殊的命令进行“预处理预处理”。经过预处理后程序可由编译程序对预处理后的源程序经过预处理后程序可由编译程序对预处理后的源程序进行通常的编译处理,得到可供执行的目标代码。进行通常的编译处理,得到可供执行的目标代码。3提

2、供的预处理功能主要有以下三种:提供的预处理功能主要有以下三种:宏定义宏定义文件包含文件包含条件编译条件编译 这些功能分别用宏定义命令、文件包含命这些功能分别用宏定义命令、文件包含命令、条件编译命令来实现。为了与一般语句令、条件编译命令来实现。为了与一般语句相区别,这些命令以符号相区别,这些命令以符号“”开头。开头。4 9.1 9.1 宏定义宏定义9.1.1 不带参数的宏定义不带参数的宏定义d defineefine 标识符标识符 字符串字符串例如:例如:d defineefine PI PI 3.14159263.1415926宏定义的作用是在本程序文件中用指定的标识符宏定义的作用是在本程序文

3、件中用指定的标识符PIPI来代来代替替“3.14159263.1415926”这个字符串,在编译预处理时,在该命这个字符串,在编译预处理时,在该命令以后出现的所有的令以后出现的所有的PIPI都用都用“3.14159263.1415926”代替。代替。这个标识符(名字)称为这个标识符(名字)称为“宏名宏名”。在预编译时将宏名替换成字符串的过程称为在预编译时将宏名替换成字符串的过程称为“宏展开宏展开”。d defineefine是宏定义命令是宏定义命令。5 9.1.2 带参数的宏定义带参数的宏定义 作用:作用:不是进行简单的字符串替换,还要进不是进行简单的字符串替换,还要进行参数替换。行参数替换。

4、d defineefine 宏名(参数表)宏名(参数表)字符串字符串 字符串中包含在括弧中所指定的参数字符串中包含在括弧中所指定的参数#d defineefine S(a,b)a*b S(a,b)a*b area=S(3,2);area=S(3,2);程序中用和分别代替宏定义程序中用和分别代替宏定义中的形式参数和中的形式参数和b b,用用*代代替替S(3,2)S(3,2)。因此赋值语句展开因此赋值语句展开为:为:area=3*2area=3*26书写书写#definedefine命令行应注意的几点命令行应注意的几点:(1 1)宏名与宏体之间应以空格相隔。)宏名与宏体之间应以空格相隔。(2 2)

5、宏名不能用引号括起来)宏名不能用引号括起来(3 3)较长的定义在一行中写不下时,可在本行末尾使)较长的定义在一行中写不下时,可在本行末尾使用反斜杠用反斜杠()()表示要续行。表示要续行。(4 4)对带参宏定义,宏体及其各个形参应该用圆括号)对带参宏定义,宏体及其各个形参应该用圆括号括起来。括起来。(5 5)宏定义可以在源程序的任何地方,但一定要写在)宏定义可以在源程序的任何地方,但一定要写在程序中引用该宏之前。程序中引用该宏之前。7#include#define PI 3.1415926#define S(r)PI*r*rvoid main()float a,area;a=3.6;area=S

6、(a);printf(r=%fnarea=%fn,a,area);运行情况如下:运行情况如下:=3.600000 area=40.715038赋值语句赋值语句“area=S(a);”经宏展开后为:经宏展开后为:area=3.1415926*;8#include#define p(x)2*x*xvoid main()int m,n,s;m=10;n=20;s=p(m+n);printf(“s=%d“,s);9#include#define p(x)2*x*xvoid main()int m,n,s;m=10;n=20;s=p(m+n);printf(“s=%d“,s);10#include#de

7、fine p(x)2*x*xvoid main()int m,n,s;m=10;n=20;s=p(m+n);printf(“s=%d“,s);S=2*m+n*m+n;S=2*m+n*m+n;11宏与宏与函数的区别函数的区别1、时空效率不同、时空效率不同宏定义时要用宏体替换宏名,往往使程序膨宏定义时要用宏体替换宏名,往往使程序膨胀,加大了系统的存储开销。但是它不像函数调用胀,加大了系统的存储开销。但是它不像函数调用那样要进行参数传递、保存现场、返回等操作,所那样要进行参数传递、保存现场、返回等操作,所以时间效率比函数。以时间效率比函数。2、参数计算、传递方式不同、参数计算、传递方式不同宏虽然可以

8、带有参数,但宏定义过程不像宏虽然可以带有参数,但宏定义过程不像函数那样要进行参数值的计算、传递及结果返回函数那样要进行参数值的计算、传递及结果返回等操作,宏定义只是简单的字符替换,并不进行等操作,宏定义只是简单的字符替换,并不进行计算。有一些过程是不能用宏来代替函数的,如计算。有一些过程是不能用宏来代替函数的,如递归调用。递归调用。12所谓所谓“文件包含文件包含”处理是指一个源文件可以将另外一处理是指一个源文件可以将另外一个源文件的全部内容包含进来。语言提供了个源文件的全部内容包含进来。语言提供了#includeinclude命令用来实现命令用来实现“文件包含文件包含”的操作。的操作。其一般形式为其一般形式为:#include 文件名文件名或或#include 9.2“文件包含文件包含”处理处理

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

当前位置:首页 > 生活休闲 > 生活常识

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

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