第7章编译预处理.ppt

上传人:sccc 文档编号:5335204 上传时间:2023-06-27 格式:PPT 页数:14 大小:167.01KB
返回 下载 相关 举报
第7章编译预处理.ppt_第1页
第1页 / 共14页
第7章编译预处理.ppt_第2页
第2页 / 共14页
第7章编译预处理.ppt_第3页
第3页 / 共14页
第7章编译预处理.ppt_第4页
第4页 / 共14页
第7章编译预处理.ppt_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《第7章编译预处理.ppt》由会员分享,可在线阅读,更多相关《第7章编译预处理.ppt(14页珍藏版)》请在三一办公上搜索。

1、,第七章,编译预处理,所谓预处理是指,在对源程序进行编译之前,先对源程序中的预处理命令(主要指宏定义命令、文件包含命令和条件编译命令)进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。,预处理,宏定义文件包含条件编译,define#include,为了和一般C语句相区别,这些命令以符号#开头。,7.1.1 不带参数的宏定义(简单替换),用标识符来代表一个字符串(给字符串取个名字)。C语言用“#define”进行宏定义。C编译系统在编译前将这些标识符替换成所定义的字符串。,概念,格式,define 标识符 字符串,相关概念,宏名:宏定义中的标识符称为“宏名”。宏展开:在预编译时

2、将宏名替换成字符串的过程称 为“宏展开”。,#define PI 3.1415926,7.1 宏定义,#include#define PI 3.1415926 void main()float radius,length,area,volume;printf(Input a radius:);scanf(%f,例7.1 输入圆的半径,求圆的周长、面积和球的体积。要求使用无参宏定义圆周率。,1、宏名遵循标识符规定,习惯用大写字母表示,以便区别普通的变量。2、#define之间不留空格,宏名两侧空格(至少一个)分隔。3、宏定义字符串不要以分号结束,否则分号也作为字符串的一部分参加展开。从这点上看宏

3、展开实际上是简单的替换。,说明,#define PI 3.14;area=PI*r*r;,area=3.14;*r*r;,4、宏定义是预处理指令,与定义变量不同,它只是进行简单的字符串替换,不分配内存。5、宏定义用宏名代替一个字符串,并不管它的数据类型是什么,也不管宏展开后的词法和语法的正确性,只是简单的替换。是否正确,编译时由编译器判断。例如:#define PI 3.I4 照样进行宏展开(替换),是否正确,由编译器来判断。6、#define命令出现在程序中函数的外面,宏名的有效范围从定义命令开始直到本源程序文件结束。可以通过#undef终止宏名的作用域。,#define G 9.8#def

4、ine PI 3.14 int f1()#undef Gvoid main(),7、宏定义时,可以引用已定义的宏名,可以层层置换。若宏名出现在双引号“”括起来的字符串中时,将不会产生宏替换。,#define R 3.0#define PI 3.14#define L 2*PI*R#define S PI*R*Rvoid main()printf(“L=%fnS=%fn”,L,S);,printf(“L=%fnS=%fn”,2*3.14*3.0,3.14*3.0*3.0);,7.1.2 带参数的宏定义,带参数的宏定义不只是进行简单的字符串替换,还要进行参数替换。,格式,概念,define 宏名(

5、参数表)字符串,类似函数头,但是没有类型说明,参数也不要类型说明,展开置换规则,按照#define命令行中指定的“字符串”从左到右进行置换(扫描置换)。如果串中包含宏定义中的形参,则将程序中相应的实参代替形参,其它字符原样保留,形成了替换后的字符串。,举例,#define S(a,b)a*barea=S(3,2);,area=3*2;,例7.2 用带参数的宏定义表示圆的面积。,#define PI 3.14#define S(r)PI*r*r void main()float a,area;a=3.6;area=S(a);printf(“r=%fnarea=%fn”,a,area);,1、正因

6、为带参宏定义本质还是简单字符替换(除了参数替换),所以容易发生错误。例:define S(r)3.14*r*r area=S(a+b);,说明,area=3.14*a+b*a+b;,不再是求面积了。,此时S是符号常量(不带参的宏名),它代表字符串“(r)3.14*r*r”。,2、定义带参数宏时还应该注意宏名与参数表之间不能有空格。有空格就变成了不带参数的宏定义。例:define S(r)3.14*r*r,7.2“文件包含”处理,概念,格式,#include“文件名”或#include,所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。,示

7、意图,1、被包含的文件常常被称为“头文件”(#include一般写在文件的开头)。头文件常常以“.h”为扩展名(也可以用其它的扩展名,.h只是习惯或风格)。2、一条#include只能包含一个头文件,如果要包含多个头文件,使用多条#include命令。3、在一个被包含的文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。4、被包含的头文件可以用“”括起来,也可以用括起来。区别在于:“”先在用户当前目录查找头文件,如果没找到,再到存放C库函数头文件的目录中查找;而直接到存放C库函数头文件的目录中查找。一般地说,使用双引号比较保险。5、习惯上,用户头文件一般在用户目录下,所以常常用“”;系统

8、库函数的头文件一般在系统指定目录下,所以常常用。,说明,概念:所谓“条件编译”,是对部分内容指定编译的条件,使其只在满足一定条件才进行编译。,条件编译命令的几种形式:,(1)ifdef 标识符 程序段else 程序段endif,(2)ifndef 标识符 程序段else 程序段endif,(3)if 表达式 程序段else 程序段endif,7.3 条件编译,例7.3 输入一行字母字符,根据需要设置条件编译,使之能将字母全改为大写输出,或全改为小写字母输出。,#include#define LETTER 1 void main()char str20=C Language,c;int i=0;while(c=stri)!=0)i+;#if LETTER if(c=a,运行结果为:LANGUAGE,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号