下载此文档

编译预处理和动态存储分配.ppt


文档分类:IT计算机 | 页数:约13页 举报非法文档有奖
1/13
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/13 下载此文档
文档列表 文档介绍
第13章编译预处理和动态存储分配1编译预处理2动态存储分配§1编译预处理-宏替换一、不带参数的宏定义#define是宏定义的命令1、格式:#define标识符字符串标识符,一般用大写的字母表示。如:#、用于将一个指定的标识符替换为一个字符串说明:宏名一般用大写字母表示,便于和变量名相区别使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量,而且不容易出错,修改的话只需改#define一行就可以了,提高了程序的通用性宏定义是用宏名来代替一个字符串,只是作简单的置换,不作正确性检查宏定义不是C语句,不必在行末加分号,如果加了分号的话会连分号一起进行置换,这样就会造成语法错误#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。通常写在文件开头,函数之前,作为文件一部分,在此文件范围内有效可以用#undef命令终止宏定义的作用域二、带参数的宏定义1、定义:#define宏名(形式参数表)宏体2、引用:宏名(实际参数表)3、对带参数的宏,不仅对宏名进行替换,而且还对参数进行替换。例如:#include<>##definecircuit(r)2*PI*r#definearea(r)PI*r*rmain(){floatra,c,a;scanf(“%f”,&ra);c=circuit(ra);a=area(ra);printf(“ra=%f,c=%f,a=%f”,ra,c,a);}使用宏时应注意:A、对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define中的形参,定义宏时,最好对参数和宏体用括号括起来如:#definesquare(n)n*n调用时s=aquare(a+1)则变成了s=a+1*a+1与预期效果不同。B、定义带参数的宏时,宏名和左括号之间不能有空格,、对宏的定义,只是进行字符的替换,、带参数的宏定义与函数有些相似,但有不同1)、函数调用时,先求出实参表达式的值,然后传给形参。使用带参数的宏定义只是进行简单的字符替换#defineS(r)PI*r*rarea=S(a+b)//把实参a+b代替形参r2)、宏替换不存在返回值类型和参数类型的问题。3)、函数的调用是在程序运行时处理的,分配临时的内存但运,而宏展开则是在编译的时候进行的,在展开时并不分配内存单元,不进行值的传递处理,所以执行速的比函数快4)、调用函数只可得到一个返回值,而用宏可以设法得到多个结果利用宏定义实现程序的简化#definePRprintf#defineNL“\n”#defineD“%d”#defineD1DNL#defineD2DDNL#defineD3DDDNL#defineD4DDDDNL#defineS“%s”main(){inta,b,c,d;charstring[]=“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);}§、指的是一个文件将另一个指定的源文件包含进去,其一般形式为:#include<文件名>或#include“文件名”第一种形式:系统到系统标准目录中搜索该文件第二种形式:首先到当前目录中搜索该文件,如找不到则到系统标准目录中去搜索该文件。2、标准目录通常在编译系统的include目录中,3、编程时,用户可以编写自己的头文件,其中也可以包含另外的头文件。4、编译时并不是作为两个文件进行连接,而是作为一个源程序编译,得到一个目标文件例:#definePRprintf#defineNL“\n”#defineD“%d”#defineD1DNL#defineD2DDNL#defineD3DDDNL#defineD4DDDDNL#defineS“%s”#include“”main(){inta,b,c,d;charstring[]=“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);}说明:一个include命令只能指定一个被包含文件,如果要包含n个文件,要用n个include命令如果文件1包含文件2,而文件2中要用到文件3的内容,则可在文件1中用两个include命令包含文件2和3,并且文件3应出现在文件2之前,这样file1和file2都可以使用file3的内容了文件包含是可以嵌套的被包含文件与其所在的文件预编译后已成为同一个文件,因此如果file2中如果有全局

编译预处理和动态存储分配 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数13
  • 收藏数0 收藏
  • 顶次数0
  • 上传人q1188830
  • 文件大小95 KB
  • 时间2019-11-22