资源描述:
《C语言第十三章《预编译处理和动态存储分配》课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十三章预编译处理和动态存储分配预编译处理就是在C编译系统对C源程序进行编译前,由预编译处理程序对预编译处理命令进行处理的过程以”#”开头,单独占一行,后面没有”;”#define#include宏替换不带参数的宏定义#define宏名替换内容#definePI3.1415926宏名是用户自定义标识符,不得与其他名字相同#define可以不包含“替换内容”,这时仅仅是宏名被定义了替换内容中可以包含已定义过的宏名:#definePI3.1#defineADDPI(PI+0.0415926)#d
2、efineTWO_ADDPI(2*ADDPI)当宏定义在一行中写不下,只需要在最后一个字符后紧接着加一个反斜线“”同一个宏名不能重复定义,除非两个宏定义命令行完全一致替换文本不能替换双引号中与宏名相同的字符串,也不能替换用户标识符中相同的成分Exampe13_1在程序中将所有独立的标识符【标识符中包含的或字符串中的都不替换】N用15代替#include"stdio.h"#defineN15main(){inti;i=3;printf("%d",i*N);/*i*N替换成i*15*/}Exampl
3、e13_2输出35#include"stdio.h"#defineN10+5main(){inti;i=3;printf("%d",i*N);/*i*N替换成i*10+5*/}Example13_3输出48#include"stdio.h"#defineN4+5main(){inti;i=3;printf("%d",i*N*N/N*i);/*i*N*N/N*i替换成i*4+5*4+5/4+5*i*/}Example13_4.c只有宏定义先替换后运算,语句直接运算#include"stdio.h
4、"#defineN4+5main(){inti;i=3+2;printf("%d",i*N/N/i);/*i*N/N/i替换成i*4+5/4+5/i既5*4+5/4+5/5*/}带参数的宏定义#define宏名(形参列表)替换内容#defineN(x,y)((x)*(y))a=N(i,j);/*相当于a=((i)*(j))*/一对圆括号不能少宏替换不占运行时间,函数调用要占用一系列处理时间带参数的宏定义与函数的区别:函数宏信息传递实参的值或地址传送给形参。用实参的字符串替换形参。处理时刻及内存分
5、配程序运行时处理,分配临时内存单元。宏展开在预编译时处理,不存在分配内存的问题。参数类型实参和形参类型一致。如不一致,编译器进行类型转换。字符串替换,不存在参数类型问题。返回值可以有一个返回值。可以有多个返回值。对源程序的影响无影响。宏展开后使程序加长。时间占用占用程序运行时间。占用编译时间。#definePI3.1415926#defineCIRCLE(R,L,S,V)L=2*PI*R;S=PI*R*R;V=4/3*PI*R*R*Rmain(){floatr,l,s,v;scanf("%f",&r)
6、;CIRCLE(r,l,s,v);printf("r=%6.2f,l=%6.2f,s=%6.2f,v=%6.2f",r,l,s,v);}终止宏定义用#undef提前终止宏定义的作用域#definePI3.1415926main()…#undef…Example13_5带参数的宏定义#include"stdio.h"#defineN(x,y)x*ymain(){inti,j;i=5;j=6;printf("%d",N(i,j));/*N(i,j)替换成i*j*/printf("%d",N
7、(i+j,j+i));/*N(i+j,j+i)替换成i+j*j+i)}Example13_6.c#include"stdio.h"#defineN(x,y)x>y?x:ymain(){inti,j;i=5;j=6;printf("%d",10*N(i,j));/*10*N(i,j)替换成10*i>j?i:j10*5>6?5:6*/}Example13_7#include"stdio.h"#defineN(x,y)x>y?x:ymain(){inti,j;i=5;j=6;printf("%d",
8、2*N(i,j)*10);}文件包含#include<文件名>或#include“文件名”如果是双引号,系统先在源程序所在目录查找,找不到再按照系统指定的标准方式到有关目录去寻找如果是尖括号,直接按照系统指定的标准方式到有关目录中去寻找头文件不一定是系统提供后缀不一定用”.h”当包含文件修改后,对包含该文件的源程序必须重新进行编译连接动态存储分配四个函数:malloc,calloc,free,realloc必须包含头文件stdlib.hmalloc函数